Teilstring-Vergleich in C und splitten

Ozzy Ozborn

Erfahrenes Mitglied
Hi,

ich habe in einem char-Array Zeichen stehen, und möchte nun prüfen, ob die ersten z.B. 5 Zeichen mit einem gegebenen Wort übereinstimmen. Gibt es da eine elegante Varinate?
Mir würde jetzt nur einfallen, die ersten Zeichen mit strncpy in einen neuen String zu kopieren, und denn dann zu vergleichen... Aber geht es noch schöner?

Und meine zweite Frage: Gibt es in C die Möglichkeit, einen String nach Zeichen zu durchsuchen (",") und an den Stellen zu splitten und ein Array mit den gefundenen Werten zurückzugeben?

Vielen Dank für Eure Hilfe, Ozzy
 
Hi,

hab jetzt selber die Lösung gefunden: Überprüfung mit strstr, und splitten mit strtok. Aber eine Frage bleibt: wenn zwischen den Trennzeichen nichts steht, so möchte ich das trotzdem mitbekommen. Gibt es dafür eine Lösung?

MfG, und vielen Dank, Ozzy
 
ich habe in einem char-Array Zeichen stehen, und möchte nun prüfen, ob die ersten z.B. 5 Zeichen mit einem gegebenen Wort übereinstimmen. Gibt es da eine elegante Varinate?

Funktion mit Beispiel:
Code:
#include <stdio.h>
   
int vergleich( char *string_what_ever, char *gegebenes_wort, int amount ) {
   
   int loop;
   
   for( loop = 0; loop < amount; loop++ )
      {
         //printf( "[%i] %c < - > %c\n", loop+1,  string_what_ever[loop], gegebenes_wort[loop] );
         
         if( string_what_ever[loop] == '\0' ||  gegebenes_wort[loop] == '\0' )
            {
               printf( "[Info]: Ende des Strings bevor die Anzahl zu vergleichenden Buchstaben erreicht wurde!\n\n" );
               return 0;
            }
         if( string_what_ever[loop] != gegebenes_wort[loop] ) 
            {
               printf( "[Info]: Die ersten %i Buchstaben stimmen nicht ueberein!\n\n", amount );
               return 0;
            }
      }

   printf( "[Info]: Die ersten %i Buchstaben stimmen ueberein!\n\n", amount );
   
   return 1;
   
}

int main() {

   char string_what_ever[] = "roflmofl4ever...";
   char gegebenes_wort[]   = "roflmofl2better...";
   char gegebenes_wort2[]  = "roflmofl4ever...";
   
   vergleich( string_what_ever, gegebenes_wort, 4 );
   vergleich( string_what_ever, gegebenes_wort, 8 );
   vergleich( string_what_ever, gegebenes_wort, 12 );
   vergleich( string_what_ever, gegebenes_wort2, 50 );

   return 0;

}

Dürfte ziemlich selbsterklärend sein, falls fragen bestehen, einfach fragen.

Und meine zweite Frage: Gibt es in C die Möglichkeit, einen String nach Zeichen zu durchsuchen (",") und an den Stellen zu splitten und ein Array mit den gefundenen Werten zurückzugeben?

Dürfte klar sein was zu tun ist wenn du die BeispielFunktion oben verstanden hast.
1. Anstatt mit einem anderen String zu vergleichen einfach nach einem bestimmte
Zeichen vergleichen
if( string_what_ever[loop] == ',' )

2. wenn das if wahr ist neuen speicherplatz mallocen und in dein
Rückgabe-Array einfügen.
Aber eine Frage bleibt: wenn zwischen den Trennzeichen nichts steht, so möchte ich das trotzdem mitbekommen. Gibt es dafür eine Lösung?

Also du meinst es könnte sowas vorkommen "wort1, wort2,, wort4, wort5" ?
Kenne mich mit den Befehlen strstr, strtok, etc net so gut aus, weil ich für
sowas immer eigene Funktionen schreibe. Den dann kann man durch eine
zusätzliche if-Abfrage das ganze regeln.

Ich hoffe ich konnte dir irgendwie helfen.
 
Zurück