Anzeige:
Ergebnis 1 bis 7 von 7

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

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74

    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):
    PHP-Code:
    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:
    PHP-Code:
    char** erstesWort,** zweitesWort;
    split("Mein Name",erstesWort,zweitesWort,' '); 
    Nun sollte
    Code:
    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

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Welche Sprache? C? C++? ?...

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Eigentlich macht das schon die Funktion
    char *strtok(char *string, const char *delimiter);

    Zitat Zitat von Manpeitsch
    DESCRIPTION
    The strtok() function is used to isolate sequential tokens in a null-ter-
    minated string, str. These tokens are separated in the string by at
    least one of the characters in sep. The first time that strtok() is
    called, str should be specified; subsequent calls, wishing to obtain fur-
    ther tokens from the same string, should pass a null pointer instead.
    The separator string, sep, must be supplied each time, and may change
    between calls.

    The strtok() function returns a pointer to the beginning of each subse-
    quent token in the string, after replacing the separator character itself
    with a NUL character. Separator characters at the beginning of the
    string or at the continuation point are skipped so that zero length
    tokens are not returned. When no more tokens remain, a null pointer is
    returned.
    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    In c wuerde das so aussehen:
    Code:
    void split_input( char *buffer, char **args )
    {
      // split the input buffer.
      int i = 0;
      args[i++] = strtok( buffer ," ");
      while ( (args[i++] = strtok(NULL," ") ) != NULL )
        ;
      args[--i] = NULL;
    }
    Evtl. brauchst du die Zeile
    args[--i] = NULL;
    nicht, ich musste sie fuer das weiterverwenden des Arrays mit
    Code:
    if (pid == 0)
    	{
    		pause();
    		char *args[66];
    		parse_input(buffer, args);
    
    		execvp( *args, args);
    		exit(1);
    	}
    einfuegen.
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    nul: zur Erklärung, warum das args[--i] = NULL; da bei dir sein muss, sei gesagt, daß die weiteren Funktionen, die du verwendest, ein NULL-terminiertes Array verlangen. Soll heißen, die steppen solange durch das Array, bis das aktuelle Element == NULL ist. Wenn da keines kommt, verlaufen die sich im Speicher.

  6. #6
    Registrierter Benutzer Avatar von ExRevel
    Registriert seit
    08.11.2004
    Ort
    Stuttgart
    Beiträge
    33
    Sollte aber auch beachtet werden

    Code:
    Never use these functions. If you do, note that:
    
                  These functions modify their first argument.
    
                  These functions cannot be used on constant strings.
    
                  The identity of the delimiting character is lost.
    
                  The strtok() function uses a static buffer while parsing,  so
                  it's  not thread safe. Use strtok_r() if this matters to you.
    ciao Exi
    The CodeWars Project (Coding Contest for AI Buffs)

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Richtig, deshalb sollte man bevor man strtok einen Pointer übergibt, dessen Inhalt per strcpy in einen Puffer kopieren und mit dem neuen Puffer arbeiten. Das erspart einem lästiges Wundern über den vergrützten String, hinterher.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •