我正在处理一项任务,作为其中的一部分,我需要从字符串中提取整数。
我试过使用 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"
(例如)我会提取 5
和 8
从那个字符串。字符串的格式始终相同。
我怎样才能做到这一点?
最佳答案
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/