2009-06-23 9 views
7

J'ai un problème très simple en C. Je lis un linewise de fichier, et le stocker dans un tamponentier Extrait du char buffer

char line[80]; 

Chaque ligne a la structure suivante:

Timings results : 2215543 
Timings results : 22155431 
Timings results : 221554332 
Timings results : 2215543 

Ce que j'essaie de faire, c'est d'extraire la valeur entière de cette ligne. Est-ce que C ici fournit une fonction simple qui me permet de faire cela?

Merci

Répondre

2

Oui - essayez atoi

int n=atoi(str); 

Dans votre exemple, vous avez un préfixe fixe avant l'entier, de sorte que vous pouvez simplement ajouter un décalage à SZLINEs avant de le transmettre à atoi, par exemple

int offset=strlen("Timings results : "); 
    int timing=atoi(szLine + offset); 

Assez efficace, mais ne gère pas bien les lignes qui ne sont pas comme prévu. Vous pouvez vérifier chaque ligne d'abord que:

const char * prefix="Timings results : "; 
    int offset=strlen(prefix); 
    char * start=strstr(szLine, prefix); 
    if (start) 
    { 
     int timing=atoi(start+offset); 

     //do whatever you need to do 
    } 
    else 
    { 
     //line didn't match 
    } 

Vous pouvez également utiliser sscanf pour les lignes d'analyse syntaxique comme celui-ci, ce qui rend pour le code plus concis:

int timing; 
    sscanf(szLine, "Timings results : %d", &timing); 

Enfin, vous pouvez aussi consulter Parsing Integer to String C pour d'autres idées.

+1

Il vous reste à analyser la chaîne car ne retourne pas atoi() 0 si votre chaîne commence avec une valeur non numérique? – Makis

+1

'strtol' est meilleur que' atoi' car il vous permet de gérer les erreurs. –

12

peut utiliser sscanf par ligne, comme:

#include <stdio.h> 
int time; 
char* str = "Timings results : 120012"; 

int n = sscanf(str, "Timings results : %d", &time); 

dans ce cas n == 1 signifie succès