运行:
#include <stdio.h>
int main(int argc, char *argv[]) {
const char *exp = "10-2+3*5";
char tok[255];
sscanf(exp, "%[^+-*/^]", tok);
printf("%s\n", tok);
sscanf(exp, "%[^-+*/^]", tok);
printf("%s\n", tok);
return 0;
}
输出:
10-2
10
但为什么?
答案 0 :(得分:2)
将连字符放在[...]
集的末尾。这与正则表达式类似。
sscanf的%[...]
格式接受范围。范围可以像这样使用:%[a-z]
为区分匹配的纯连字符,必须将其放在末尾,因此不会将其解释为范围。
您可以在sscanf manual page上找到更多文档。向下滚动到描述[
模式的部分。