Helft einem Newbie mal bitte mit "String"-Funktion..



  • Hallo zusammen,

    könnte einer von euch mir mal einen 3-5zeiler schreiben der aus einem mit '\n' abgeschlossenem String zwei macht, getrennt durch Leerzeichen im Original?

    Ich möchte mir weitere String-Funktionen bauen und brauche mal eine funktionierende "Referenz", da ich mich bei der Zeigerarithmetik dauernd verhaue...

    Ich suche(die Pointer könnten falsch sein, ** oder * hab' ich noch nicht so im Griff):

    void split(char ** row,char ** first,char ** last,char delimiter);
    

    wobei row die Zeile ist, first der vordere Ergebnis-String und last der hintere, getrennt in row durch delimiter

    Im Aufruf:

    char** erstesWort,** zweitesWort;
    split("Mein Name",erstesWort,zweitesWort,' ');
    

    Nun sollte

    erstesWort="Mein\0"
    zweitesWort="Name\0"
    

    sein, also gewöhnliche Strings....

    Ich denke, das einer von euch das in zwei Minuten hinbekommt, daher frage ich einfach mal. Danke schon mal 😉

    Grüße, Qeldroma



  • schau dir mal die Funktion strtok an



  • der folgende code sollte wohl dem entsprechen, was du suchst

    #include <stdio.h>
    
    void
    split (char *text, char *erstes_wort, char *zweites_wort, char trennzeichen)
    {
      char c;
    
      while((c=*text++) && c!=trennzeichen)
        *erstes_wort++=c;
    
      *erstes_wort='\0';
    
      while(c==trennzeichen) c=*text++;
    
      while(c)
      {
        *zweites_wort++=c;
        c=*text++;
      }
    
      *zweites_wort='\0';
    }
    
    int
    main (int argc, char *argv[])
    {
      char erstes_wort[100],
           zweites_wort[100],
           text[]="Mein Name";
    
      printf("        text == \"%s\"\n",text);
    
      split(text,erstes_wort,zweites_wort,' ');
    
      printf(" erstes_wort == \"%s\"\n",erstes_wort);
      printf("zweites_wort == \"%s\"\n",zweites_wort);
    }
    

    allerdings ist dein ganzer ansatz nicht optimal. was ist, wenn der zu teilende text mehr als zwei worte enthält? besser wäre es, eine funktion zu programmieren, die ein wort nach dem anderen vom anfang des strings abzwackt.

    DocJunioR hat schon recht: beschäftige dich mal mit der ansi-c funktion strtok(). da kannst du einiges von lernen!


Log in to reply