2013-01-17 280 views
0

我一直在试图弄清楚这一点,而且我有种解决方法,但我只是想检查一下我是不是错过了一些明显的东西。基本上,我有一系列遵循特定规则的命令。包含数字,ASCII字母或某些符号的任何东西都是一个标记,并且它们是分隔符。我需要能够告诉我刚刚找到哪一个,并将它们存储在一个数组中。C - 使用sscanf忽略空白

所以在while循环我有

a = sscanf (cp, "%[[email protected]:/-.,^+% ]", str); 

我已经包含了空间作为符号来寻找,因为我无法找出任何其他方式之一。相反,当我得到了这个词(加不然可能的空间),我称之为

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

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

如果不是,那也没关系。它一直在窃听我整天。

+0

可能重复[在C中忽略空白与sscanf](http://stackoverflow.com/questions/5292826/ignoring-whitespace-with-sscanf-in-c) –

回答

1

则可以将格式更改为

a = sscanf (cp, " %[[email protected]:/-.,^+%]", str); 

格式的主导' '跳过空白字符的[可能是空的]序列,然后你会在非空受理令牌序列扫描字符。

+0

但这并不意味着必须有我的字符串之前有空白吗?所以,即使在令牌和分隔符之间碰巧没有空格,那么它仍然有效吗? (对不起,我会检查自己,但我现在正在使用手机) – user1777900

+0

@ user1777900这意味着如果有任何字符串,请在字符串之前跳过任何空格。 – WhozCraig

+0

@ user1777900格式字符串中的空格消耗的空白序列可能为空。如果没有空格,psace会匹配一个空白序列的空格标记。 –