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

标签 c string-parsing

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

我试过使用 atoi()函数,但它总是返回 0 ,所以我切换到 strtol() ,但它仍然返回 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);
}

这样做的目的是在一个字符串中 "e5 d8" (例如)我会提取 58从那个字符串。

字符串的格式始终相同。

我怎样才能做到这一点?

最佳答案

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

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

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

( man strpbrk )

如果您的数字可能被签名,您将需要更复杂的东西。一种方法是执行上述操作,然后如果前一个字符是 - 则备份一个字符。但要注意字符串的开头:
if ( nump != str && nump[-1] == '-') --nump;

只是将 - 放入 strpbrk 参数中会在输入上产生错误的匹配,比如 non-numeric7

关于c - 如何从字符串中提取整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60850405/

相关文章:

c++ - 实现 T9 文本预测

c - 从 C 文件中读取 2 个不同的列并将它们存储在 2 个不同的数组中?

c - stm32 WFI不触发

对限制限定符的未定义行为感到困惑

python - 如何在 Python 3 中解析字节串?

php - 将字符串解析成部分,只有连续的单词,而不是幂集

C 检查字符串的最后一个字符是否与 X 相等

c - 在结构中有一个不完整的数组是什么意思?

file - Ocaml - 文件和解析

Javascript - 值存在,然后消失,然后再次出现?