在文本中识别空间

时间:2010-02-05 15:27:35

标签: c logic whitespace character

我正在编写一个解码基本文本文件中给出的句子,音节和单词的程序。

程序逐字符循环文件。 它首先查看它是否是某种句末标记,例如! ? : ;.。 然后,如果字符不是空格或制表符,则假定它是字符。 最后,它确定如果它是空格或制表符,并且它之前的最后一个字符是有效的字母/字符(例如,不是句末标记),则它是一个单词。

我对细节有点了解,但这是我遇到的问题。 我的字数等于我的句子数。这解释的是,它是否意识到当一个句子结束标记时,一个单词停止,但真正的问题是空格被认为是有效字母。

继承我的if语句,以确定有问题的字符是否是单词中的有效字母:

else if(character != ' ' || character != '\t')

我已经排除了程序中那一点的句末标记。 (原来如果实际上)。从读取Ascii表时,32应该是空格字符。 但是,当我输出所有使其成为该代码块的字符时,空格就在那里。

那么我做错了什么?如果能阻止空间通过这个?

先谢谢,我觉得这个问题可能有点含糊不清,或措辞不合理。如果您有任何问题或需要澄清,请告诉我。

3 个答案:

答案 0 :(得分:8)

您不应该依赖于字符的实际数字:这取决于您的平台使用的编码,并且可能不是ASCII。您可以通过简单地对其进行测试来检查任何特定字符。例如,要测试c是否为空格字符:

if (c == ' ')

将起作用,更易于阅读,并且便携。

如果您想跳过所有空格,请使用#include <ctype.h>,然后使用isspace()

if (isspace((unsigned char)c))

编辑:正如其他人所说,检查“不是空格”的条件是错误的,但上述观点仍然适用。因此,您的情况可以替换为:

if (!isspace((unsigned char)c))

答案 1 :(得分:4)

我注意到了

(character != 32 || character != 9)

总是如此。因为如果字符是32则不是9,而真或假是真的......

你可能意味着

(character != ' ' && character != '\t')

答案 2 :(得分:0)

将您考虑的特定字符与空格进行比较可能会更好,也可以使用&amp;&amp;:

if ((character != ' ') &&
    (character != '\t'))