J'ai besoin d'une fonction efficace qui extrait la première seconde et le reste de la phrase en trois variables.Comment extraire efficacement des mots d'une phrase en C?
Répondre
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
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. –
Très vrai, changé d'exemple à utiliser strtok_r –
C'est en me donnant le premier jeton en rappel et non la phrase restante. –
@ BartłomiejSemańczyk En fait, si vous retirez le lien, il dit toujours 'strtok', donc c'est toujours une réponse. – MicroVirus
@ BartłomiejSemańczyk J'ai répondu à cela en 09, le lien fonctionne toujours! –
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.
+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. –
- 1. Comment combiner les mots d'une phrase à des termes composés?
- 2. Comment générer des mots longs de 2 caractères efficacement?
- 3. Extraire des fichiers d'un Jar plus efficacement
- 4. comment rechercher des mots entiers efficacement dans un sqlite db
- 5. Comment puis-je convertir une phrase en un tableau de mots?
- 6. comment extraire des milliers de lignes à partir d'une procédure stockée efficacement
- 7. Rechercher une phrase dans une chaîne (C#)
- 8. Comment extraire une phrase correspondant à partir de données dans MYSQL/PHP?
- 9. Comment extraire des données d'un fichier XML
- 10. Extraire le code C# en ligne des fichiers apsx
- 11. Comment stocker efficacement l'historique des modifications?
- 12. Comment implémenter efficacement des sessions dans GAE?
- 13. Comment extraire une image d'un fichier pdf en utilisant C#
- 14. (PHP) insérer au hasard une phrase de 10 mots dans un document texte volumineux
- 15. C# Linq Mots-clés?
- 16. recherche Phrase exacte en utilisant Lucene.net
- 17. Comment "faire" efficacement avec Vim
- 18. Comment copier efficacement istringstream?
- 19. Scission d'une chaîne en mots et ponctuation
- 20. PNL: phrase «positive» vs «négative» qualitativement
- 21. Comment convertir des données efficacement dans DataTable dans ADO.Net
- 22. expression régulière pour scinder la phrase de recherche
- 23. Extraire des images en utilisant iTextSharp
- 24. Comment puis-je extraire des images d'un fichier WBC en C?
- 25. en utilisant C# comment extraire des informations sur les disques durs présents sur la machine locale
- 26. Comment fusionner efficacement deux hachages dans Ruby C API?
- 27. Rails: Comment utiliser efficacement self.inherited
- 28. Extraire les valeurs RVB d'un AVFrame (FFMPEG) en C++
- 29. Trouver des mots strictement à partir de $, Regex C#
- 30. regex pour obtenir des méta-mots-clés
C'est une copie - http://stackoverflow.com/questions/1483206/how-to-tokenize-string-to-array-of-int-in-c/ - mais pas exact – ChrisF
"on-disk" est un mot ou deux mots? – sambowry
C'est juste un caractère –