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