2009-06-23 15 views
7

Ho un problema molto semplice in C. sto leggendo un file formato da linee, e memorizzarlo in un buffer estratto intero da char buffer

char line[80]; 

Ogni riga ha la seguente struttura:

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

Quello che sto cercando di fare è estrarre il valore intero da questa linea. C qui fornisce qualche funzione semplice che mi permetta di farlo?

Grazie

risposta

2

Sì - provare atoi

int n=atoi(str); 

Nel tuo esempio, si dispone di un prefisso fisso prima che il numero intero, quindi si potrebbe semplicemente aggiungere un offset al SZLINE prima di passarlo a atoi, per esempio

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

Abbastanza efficiente, ma non risponde bene con linee che non sono come previsto. Si potrebbe verificare ogni riga prima però:

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 
    } 

È inoltre possibile utilizzare sscanf per le linee di parsing di questo tipo, il che rende il codice più conciso:

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

Infine, puoi anche Parsing Integer to String C per ulteriori idee.

+1

Hai ancora per analizzare la stringa, perché non fa atoi() return 0 se la stringa inizia con un valore non numerico? – Makis

+1

'strtol' è meglio di' atoi' in quanto consente di gestire gli errori. –

12

Può usare sscanf per linea, come:

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

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

in questo caso n == 1 significa successo