C - 用sscanf忽略空格

时间:2013-01-17 17:19:49

标签: c parsing strtok scanf

我一直试图解决这个问题,而且我有一些解决方法,但我只是想检查一下我是不是错过了一些明显的东西。基本上,我有一系列遵循某些规则的命令。包含数字,ASCII字母或某些符号的任何内容都是令牌,<,>,|,&& ,;等等是分隔符。我需要能够分辨出我刚刚找到的那个并将它们存储在一个数组中。

所以在一个while循环中我有

a = sscanf (cp, "%[0-9a-zA-Z!@:/-.,^+% ]", str);

我已经将空格作为要查找的符号之一,因为我无法想出任何其他方式。相反,在我得到这个词(加上不可能的空格)后,我打电话给

 delimiters[] = " ";
 token = strtok(str, delimiters);

哪个应该删除空格,只留下一个标记(如果没有空格,它就不会改变单词)。我只是好奇是否有办法与sscanf做类似的事情,因为我知道它已经破坏了字符串,如果它们之间有空格,但如果再次调用它并且它看到空格,它就是不读任何东西。

如果没有,那也没关系。这一直只是在烦扰我。

1 个答案:

答案 0 :(得分:1)

您可以将格式更改为

a = sscanf (cp, " %[0-9a-zA-Z!@:/-.,^+%]", str);

格式中的前导' '会跳过[可能为空]的空格字符序列,然后您将扫描一系列非空格可允许的令牌字符。