2012-12-01 4 views
0

Je lis les données d'un fichier et j'ai besoin d'extraire uniquement des entiers à partir des données ci-dessous.Comment puis-je l'accomplir? Merci.Comment extraire la sous-chaîne en C

Mon entrée sera field6 et j'ai besoin de supprimer ces caractères "];" et stockez-le dans une variable entière.

Mon code: -

field6 = strtok(NULL," "); 
if (isdigit(field6)) 
{ 
    weight = atoi (field6); 
    printf("%d\n",weight); 
} 

Entrée:

43]; 
2]; 
4]; 
16]; 
25]; 

Sortie:

43 
2 
4 
16 
25 
+0

Google 'isdigit()' et ''. –

+1

Tâche parfaite pour l'une des fonctions de scanf. – goji

+0

@ H2CO3 Mais mon entrée est une chaîne. – Teja

Répondre

-1

Sans sscanf alors:

#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    const char *test = "123];"; 

    int i = 0; 

    const char *p = test; 
    while (*p && isdigit(*p)) 
    { 
    if (p != test) i *= 10; 
    i += *p - '0'; 
    ++p; 
    } 

    if (*p != ']') 
    { 
    // we have an error! 
    return 1; 
    } 

    printf("%i\n", i); 
} 
+1

+1 pour _almost_ ne nécessitant même pas libc ... isdigit pourrait être '* p> = '0' && * p <= '9'' ... sans compter printf car c'est juste pour la démo – technosaurus

+1

' i' est utilisé non initialisé – Zaffy

0

Essayez

field6 = strtok(NULL,"\n"); 
weight = atoi (field6); 
printf("%d\n",weight); 

Ceci est l'une de ces rares conditions où atoi fait exactement ce que vous avez besoin de faire.

La condition d'erreur qui ne serait pas détectée est "];" Cela serait interprété comme zéro.

Questions connexes