我有一个看起来像"年龄:83"的字符串.我想从这个字符串中取整数"83",我知道我应该使用"sscanf"函数.但是,此字符串之间没有空格.我怎样才能做到这一点?
用这个:
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个字符,则会调用未定义的行为,因为您可能会取消引用无效地址.