如何从字符串中提取整数?

Ram*_*x05 8 c string-parsing

我正在处理一项任务,作为其中的一部分,我需要从字符串中提取整数。

我试过使用该atoi()函数,但它总是返回 a 0,所以我切换到strtol(),但它仍然返回 a 0

目标是从字符串中提取整数并将它们作为参数传递给不同的函数。我正在使用一个函数,然后使用这些值来更新一些数据 ( update_stats)。

请记住,我对 C 语言编程还很陌生,但这是我的尝试:

void get_number (char str[]) {
    char *end;
    int num;
    num = strtol(str, &end, 10);
    update_stats(num);
    num = strtol(end, &end, 10);
    update_stats(num);
}
Run Code Online (Sandbox Code Playgroud)

这样做的目的是在一个字符串中"e5 d8"(例如)我将从该字符串中提取 the5和 the 8

字符串的格式始终相同。

我怎样才能做到这一点?

ric*_*ici 8

strtol没有找到字符串中的一个数字。它转换字符串开头的数字。(它确实跳过了空格,但没有别的。)

如果您需要查找数字的起始位置,可以使用以下方法:

const char* nump = strpbrk(str, "0123456789");
if (nump == NULL) /* No number, handle error*/
Run Code Online (Sandbox Code Playgroud)

( man strpbrk)

如果您的数字可能被签名,您将需要更复杂的东西。一种方法是执行上述操作,然后如果前一个字符是-. 但要注意字符串的开头:

if ( nump != str && nump[-1] == '-') --nump;
Run Code Online (Sandbox Code Playgroud)

只是把-进入strpbrk论证会产生像输入错误的匹配non-numeric7