0

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

所以在一个while循环中我有

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

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

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

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

如果没有,那也很好。它只是困扰着我一整天。

4

1 回答 1

1

您可以将格式更改为

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

格式中的前导' '会跳过 [可能为空的] 空白字符序列,然后您将扫描一系列非空格可接受的标记字符。

于 2013-01-17T17:29:57.067 回答