2009-06-23 22 views
7

Tengo un problema muy simple en C. estoy leyendo un linewise archivo, y lo almacenan en un buffer Extracto número entero de char buffer

char line[80]; 

Cada línea tiene la siguiente estructura:

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

Lo que intento hacer es extraer el valor entero de esta línea. ¿C aquí proporciona alguna función simple que me permita hacer eso?

Gracias

Respuesta

2

Sí - tratar atoi

int n=atoi(str); 

En su ejemplo, tiene un prefijo fijo antes de que el número entero, por lo que simplemente puede añadir un desplazamiento a SZLINE antes de pasarla a atoi, por ejemplo,

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

Bastante eficiente, pero no se adapta bien a las líneas que no son las esperadas. Se puede comprobar cada línea primero sin embargo:

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 
    } 

También puede utilizar sscanf para las líneas de análisis sintáctico de este tipo, lo que hace que para el código más conciso:

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

Por último, consulta Parsing Integer to String C para obtener más ideas.

+1

Usted todavía tiene que analizar la cadena, porque no hace atoi() devuelven 0 si la cadena de comienza con un valor no numérico? – Makis

+1

'strtol' es mejor que' atoi' ya que le permite manejar los errores. –

12

Puede utilizar sscanf por línea, como:

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

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

en este caso n == 1 significa el éxito