2011-10-25 2 views
2

J'ai une chaîne qui se produit dans ce format:Numéro de l'extrait de Char * Array (C-String)

.word 40

Je voudrais extraire la partie entière. La partie entière est toujours différente mais la chaîne commence toujours par .word. J'ai une fonction tokenizer qui fonctionne sur tout sauf pour cela. Lorsque je mets .word (.word avec un espace) en tant que délimiteur, il renvoie null.

Comment puis-je extraire le numéro?

Merci

+0

Je crois que ce peut être ce que vous cherchez http://stackoverflow.com/questions/1031872/extract-integer-from-char-buffer –

+0

Vous devriez la recherche pour voir s'il existe un analyseur ou lexer pour la la langue qui vous intéresse. –

Répondre

3

Vous pouvez utiliser sscanf pour extraire des données formated d'une chaîne. (Il fonctionne comme scanf, mais la lecture des données à partir d'une chaîne au lieu de l'entrée standard)

+0

Un exemple de code serait bien, puisqu'il s'agit de stackoverflow. –

8

Vous pouvez utiliser strtok() pour extraire les deux chaînes avec l'espace comme séparateur.

Online Demo:

#include <stdio.h> 
    #include <string.h> 

    int main() 
    { 
     char str[] =".Word 40"; 
     char * pch; 
     printf ("Splitting string \"%s\" into tokens:\n",str); 
     pch = strtok (str," "); 
     while (pch != NULL) 
     { 
      printf ("%s\n",pch); 
      pch = strtok (NULL, " "); 
     } 
     return 0; 
    } 

Sortie:

Splitting string ".Word 40" into tokens: 
.Word 
40 

Si vous voulez que le numéro 40 comme une valeur numérique plutôt qu'une chaîne vous pouvez alors plus utiliser atoi() pour le convertir en une valeur numérique.

+0

Epic gagner pour inclure la démo en ligne! – unwind

1

Vérifiez la chaîne avec

strncmp(".word ", (your string), 6); 

Si elle retourne 0, votre chaîne commence par « .word » et vous pouvez alors regarder (votre chaîne) + 6 pour arriver au début du numéro.

0
int foo; 
scanf("%*s %d", &foo); 

L'astérisque indique à scanf de ne pas stocker la chaîne qu'il lit. Utilisez fscanf si vous lisez un fichier ou sscanf si l'entrée est déjà dans un tampon.

0

rapide et sale:

char* string = ".word 40"; 
char number[5]; 
unsigned int length = strlen(string); 
strcpy(number, string + length - 2); 
+1

Cela vous obtient les caractères "40" mais pas un nombre entier. –

+0

Il n'a pas précisé qu'il veut un nombre entier. Il a dit "Je voudrais extraire la partie entière" mais pas dans quel format. – m0skit0

1
char str[] = "A=17280, B=-5120. Summa(12150) > 0"; 
char *p = str; 
do 
{ 
if (isdigit(*p) || *p == "-" && isdigit(*(p+1))) 
printf("%ld ", strtol(p,&p,0); 
else 
p++; 
}while(*p!= '\0'); 

Cette écriture de code dans la console tous les chiffres.