我正在处理一项任务,作为其中的一部分,我需要从字符串中提取整数。
我试过使用该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。
字符串的格式始终相同。
我怎样才能做到这一点?
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。