我有一个看起来像"年龄:83"的字符串.我想从这个字符串中取整数"83",我知道我应该使用"sscanf"函数.但是,此字符串之间没有空格.我怎样才能做到这一点?
用这个:
const char *str = "AGE:83";
int age;
sscanf(str, "%*[^0-9]%d", &age);
Run Code Online (Sandbox Code Playgroud)
此格式将跳过任何非数字并在此之后解析整数.
请注意,如果数字前没有非数字字符,它将失败.要处理数字可以在字符串开头的情况,请先使用直接匹配:
if (sscanf(str, "%d", &age) != 1
&& sscanf(str, "%*[^0-9]%d", &age) != 1) {
// no number found;
return 1;
}
// age was correctly extracted from `str`
Run Code Online (Sandbox Code Playgroud)
除非您知道前缀不包含'-'(使用格式"%*[^0-9-]%d"),否则无法以这种方式解析负数
您还可以使用字符串函数跳过前缀并将其余部分转换为atoi()或strtol():
age = atoi(str + strcspn(str, "0123456789"));
Run Code Online (Sandbox Code Playgroud)
正如Enzo Ferber所指出的,如果字符串的格式是固定的并且已知可以从中开始AGE:,则可以将字符串的其余部分转换为:
age = atoi(str + 4);
Run Code Online (Sandbox Code Playgroud)
但是,如果字符串短于4个字符,则会调用未定义的行为,因为您可能会取消引用无效地址.