2 votes

Extraire un numéro d'un tableau de caractères (C-String)

J'ai une chaîne qui se présente sous ce format :

.word 40

Je voudrais extraire la partie entière. La partie entière est toujours différente mais la chaîne de caractères commence toujours par .word . J'ai une fonction tokenizer qui fonctionne sur tout sauf sur ce point. Lorsque je mets .word (.mot avec un espace) comme délimiteur, il renvoie null.

Comment puis-je extraire le numéro ?

Merci

8voto

Alok Save Points 115848

Vous pouvez utiliser strtok() pour extraire les deux chaînes de caractères avec un espace comme délimiteur.

Démonstration en ligne :

    #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 le nombre 40 comme une valeur numérique plutôt qu'une chaîne de caractères, vous pouvez ensuite utiliser atoi() pour le convertir en une valeur numérique.

3voto

hugomg Points 29789

Vous pouvez utiliser sscanf pour extraire des données formatées d'une chaîne de caractères. (Cela fonctionne comme scanf, mais en lisant les données d'une chaîne au lieu de l'entrée standard).

1voto

Akron Points 1021

Vérifiez la chaîne de caractères avec

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

Si cela renvoie 0, alors votre chaîne commence par ".word" et vous pouvez alors regarder (votre chaîne) + 6 pour obtenir le début du nombre.

1voto

andDaviD Points 545
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');

Ce code écrit dans la console tous les chiffres.

0voto

Carey Gregory Points 4471
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 depuis un fichier, ou sscanf si l'entrée est déjà dans un tampon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X