如何使用sscanf从包含数字的字符串中提取纯字母单词
sscanf提取字符串开头纯字母的正确写法
原写法里的%s格式符会读取到第一个空白字符才终止,自然会把后续的数字也一并读入,无法自动过滤非字母内容。
要实现仅提取连续字母段的需求,直接用sscanf的字符集合匹配规则即可,格式符写为%[a-zA-Z]:该规则会从字符串起始位置开始,连续匹配所有属于a-z、A-Z范围的字母,遇到第一个非字母字符立刻停止匹配,刚好满足提取纯字母内容的要求。
正确实现代码如下:
char str[10]; // 匹配连续字母,遇到首个数字自动终止读取 sscanf("word1233", "%[a-zA-Z]", str);
补充注意事项
- 上述写法仅能提取字符串开头位置的连续字母,如果目标字母段不在字符串起始位置,需要先将读指针偏移到字母段起始位置再做匹配
- 为避免缓冲区溢出,建议给匹配长度加上限制,比如本例中str数组长度为10,需要预留1位存放字符串结束符
\0,格式符可以写为%9[a-zA-Z],最多读取9个字符 - 如果确定待提取的字母全为小写,可以把匹配集合简化为
%[a-z]
内容的提问来源于stack exchange,提问作者sanvi
相关产品推荐
相关产品推荐

