PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Helft einem Newbie mal bitte mit "String"-Funktion..



qeldroma
12-05-2005, 18:20
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

bischi
12-05-2005, 19:48
Welche Sprache? C? C++? ?...

MfG Bischi

peschmae
12-05-2005, 20:35
Eigentlich macht das schon die Funktion
char *strtok(char *string, const char *delimiter);



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ä

nul
12-05-2005, 22:17
In c wuerde das so aussehen:

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

if (pid == 0)
{
pause();
char *args[66];
parse_input(buffer, args);

execvp( *args, args);
exit(1);
}
einfuegen.

7.e.Q
13-05-2005, 07:11
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.

ExRevel
13-05-2005, 07:36
Sollte aber auch beachtet werden :)



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

7.e.Q
13-05-2005, 08:47
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. :rolleyes: