2009-10-12 9 views

Répondre

10

façon simple: Utilisez strtok() ou strtok_r pour obtenir les deux premiers jetons, ce qui les retirer de la chaîne, de sorte que la chaîne elle-même sera votre troisième jeton que vous recherchez.

dure: Parse vous-même :(

strtok est dans la bibliothèque de chaîne C, et muter votre chaîne d'origine alors faites attention, copiez la chaîne première si elle doit rester intacte

possible. exemple:

//#include <string.h> 

char input[] ="first second third forth"; 
char delimiter[] = " "; 
char *firstWord, *secondWord, *remainder, *context; 

int inputLength = strlen(input); 
char *inputCopy = (char*) calloc(inputLength + 1, sizeof(char)); 
strncpy(inputCopy, input, inputLength); 

firstWord = strtok_r (inputCopy, delimiter, &context); 
secondWord = strtok_r (NULL, delimiter, &context); 
remainder = context; 

printf("%s\n", firstWord); 
printf("%s\n", secondWord); 
printf("%s\n", remainder); 

getchar(); 
free(inputCopy); 

Cela devrait très bien fonctionner et être threadsafe

+0

Un autre gotcha est que strtok() utilise une variable statique interne, donc il n'est pas thread-safe. Utilisez strtok_r() si c'est un problème. –

+0

Très vrai, changé d'exemple à utiliser strtok_r –

+2

C'est en me donnant le premier jeton en rappel et non la phrase restante. –

3
+1

@ BartłomiejSemańczyk En fait, si vous retirez le lien, il dit toujours 'strtok', donc c'est toujours une réponse. – MicroVirus

+0

@ BartłomiejSemańczyk J'ai répondu à cela en 09, le lien fonctionne toujours! –

2

avec la chaîne d'origine non mutée Vous devez définir la délimiter. les premiers. Il y a quelques problèmes avec strtok (cela modifie son argument, par exemple, qui peut vous poser des problèmes). Je préfère lire dans la chaîne et exécuter un analyseur personnalisé qui peut aller de sscanf à un analyseur à part entière. S'il vous plaît poster un peu plus de détails.

+0

+1 'sscanf()' fonctionnerait bien, puisque je suppose que "mots" signifie "tout ce qui n'est pas un espace", rendant le spécificateur de conversion facile, et devrait éviter tous les problèmes avec 'strtok()' et amis. –

Questions connexes