我在C中遇到一个非常简单的问题。我正在按行读取文件,并将其存储在 缓冲区
char line[80];
每一行都有以下结构:
Timings results : 2215543
Timings results : 22155431
Timings results : 221554332
Timings results : 2215543
我想要做的是从这一行中提取整数值。这里的C是否提供了允许我这样做的简单函数?
由于
答案 0 :(得分:16)
每行可以使用sscanf,例如:
#include <stdio.h>
int time = -1;
char* str = "Timings results : 120012";
int n = sscanf(str, "Timings results : %d", &time);
在这种情况下,n == 1表示成功
答案 1 :(得分:2)
是 - 尝试atoi
int n=atoi(str);
在你的例子中,你在整数之前有一个固定的前缀,所以你可以在将它传递给atoi之前简单地向szLine添加一个偏移量,例如。
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以获取更多建议。