2009-06-23 2 views
7

У меня есть очень простая задача C. Я читаю файл построчно, и хранить его в буфернуюExtract целое из полукокса буфера

char line[80]; 

Каждая строка имеет следующую структуру:

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

То, что я пытаюсь сделать, заключается в извлечении целочисленного значения из этой строки. Здесь C предоставляет любую простую функцию, которая позволяет мне это делать?

Благодаря

ответ

2

Да - попробуйте atoi

int n=atoi(str); 

В вашем примере, у вас есть фиксированный префикс перед целым числом, так что вы можете просто добавить смещение к SZLINE перед передачей его в atoi, например,

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

Довольно эффективно, но не очень хорошо справляется с линиями, которые не так ожидаются. Вы можете проверить каждую строку первой, хотя:

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 
    } 

Вы также можете использовать sscanf для разбора строк, как это, что делает для более краткого кода:

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

Наконец, смотрите также Parsing Integer to String C для дальнейших идей.

+1

Вы все еще должны разобрать строку, потому что не atoi() возвращает 0, если ваша строка начинается с не численного значения? – Makis

+1

'strtol' лучше, чем' atoi', поскольку он позволяет обрабатывать ошибки. –

12

Можно использовать sscanf на линии, как:

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

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

в этом случае п == 1 означает успех

Смежные вопросы