Zeichenketten/Strings vergleichen



  • So ich hab die Suchfunktion aus dem Forum benutzt aber die findet bei mir noch nicht mal was bei String. Naja egal, zu meiner Frage, wie kann ich Strings vergleichen?

    Danke



  • Das mit der Suchfunktion ist mir auch aufgefallen, ich habe gestern ebenfalls für "string" nix gefunden...

    Anyways, nimm strcmp() bzw. strncmp()



  • Danke



  • strcmp() vergleicht die länge der strings
    strstr() vergleicht ob der eine string im anderen vorkommt

    ---

    da ich sowiso was zu strings fragen wollte mach ich das einfach mal auch hier mit rein..man muss ja nicht wegen jeder kleinigkeit neues threat aufmachen

    ich habe für SDL einige image lade/verwalt usw. funktionen gebaut und bin gerade dabei aus einer datei auszulesen und nach einem ausgelesen string ein bild zu laden...hier erst mal eine art history wie sich betroffener string durch mein prog schlängelt...

    Zeile in der Datei:
    playership=gfx/ships/player.bmp

    Auslesen:

    char *line=calloc( 255, sizeof( char ) ),
         *left, *right;
    
    fgets( line, 255, file );
    left = (char *)strtok( line, "=" );
    right = (char *)strtok( NULL, "=" );
    

    Auswerten:

    if ( strstr( left, "playership" ) )
        player_create( right );
    

    player_create:

    player_create( char *imagefile )
    {
    ...
    img_playership = SDL_LoadBMP( imagefile );
    ...
    }
    

    so...ich habe nun folgendes problem, die "form", wie der string bei SDL_LoadBMP() ankommt scheint irgendwie falsch zu sein da SDL mit einem "segmentation fault" abstürzt währen dem aufruf dieser funktion.
    wenn ich aber im oberen codeteil player_create() mit pfad von hand als parameter("/gfx/ships/player.bmp") aufrufe geht alles, wenn ich mir (char *)right zur kontrolle in eine datei drucke steht da aber genau das gleiche: /gfx/ships/player.bmp

    ich verzweifle 😞 ...hab leider noch nicht so viel mit strings in c gemacht, vielleicht wisst ihr ja was was ich übersehen hab/gar nicht seh?!

    thx...cya kolf



  • kolloffnikoff schrieb:

    strcmp() vergleicht die länge der strings
    strstr() vergleicht ob der eine string im anderen vorkommt

    strstr vergleicht nicht (in der Ausgabe verglichen mit strncmp), gibt das Teilstring zurück.

    kolloffnikoff schrieb:

    da ich sowiso was zu strings fragen wollte mach ich das einfach mal auch hier mit rein..man muss ja nicht wegen jeder kleinigkeit neues threat aufmachen

    genau das musst du tun, neuen Thread aufmachen, damit die Threads sauber bleiben und ggf. andere schneller duch die Such-Funktion die Sachen finden können.



  • kolloffnikoff schrieb:

    strcmp() vergleicht die länge der strings

    Nope. Sonst würden strcmp()/strncmp() bei gleichlangen aber unterschiedlichen Strings auch 0 zurückliefern.



  • axo...ok...so viel hab ich auch noch nicht damit gemacht...hat mich nur nämlich mal verwirrt da ich von strcmp die wirkung von strstr erwartet hab weil ich in meiner doku sehr komische erklärung dafür hab, also hab ich gedacht ich meld mich hier mal falls er eine abfrage ala if ( bla="hallo" )... machen will

    cya

    edit: oder macht strcmp eigentlich auch das gleiche und gibt halt nur true/false bzw -1/0/1 zurück??



  • kolloffnikoff schrieb:

    edit: oder macht strcmp eigentlich auch das gleiche und gibt halt nur true/false bzw -1/0/1 zurück??

    Ich habe leider keine Ahnung was du mit "das gleiche" meinst, aber strcmp() vergleicht die Zeichenketten buchstabe für Buchstabe.

    etwa so:

    int strcmp(char* a, char* b)
    {
      while(*a==*b)
      { ++a; ++b; }
      return *a-*b;
    }
    

    2 strings sind also dann gleich, wenn sie die gleiche länge haben und die gleichen buchstaben.



  • ja...ok...jetzt hab ichs glaub ich endgültig verstanden 😃

    mit "das gleiche" hab ich eben das vergleichen gemeint, weil das macht strstr ja genauso wie strcmp, nur strstr liefert einen passenden char* dazu


Anmelden zum Antworten