识别文本中的空格

问题描述:

我正在编写一个程序,用于解读基本文本文件中给出的句子,音节和单词。识别文本中的空格

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

我对细节稍微有点了解,但这里是我的问题。 我的字数相当于我的句数。这解释的是,它是否意识到,当有句末尾的标记时,一个单词会停止,但真正的问题是空格被认为是有效的字母。

我的继承人if语句,以决定是否有问题的字符是一个字一个有效的一封信:

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

我已经通过程序中的该点排除结束句标记。 (如果真的在原文中)。从阅读Ascii表格中,32应该是空格字符。 但是,当我输出所有使它进入该代码块的字符时,空间就在那里。

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

在此先感谢,我有一种感觉,这个问题可能有点模糊,或措辞不佳。如果您有任何疑问或需要澄清,请告诉我。

+2

哎呀!使用字符文字,男人!没有意义让你编码*两者都更难以阅读和依赖字符集。就像这个'character!='''...并且使用''\ t''作为标签。 – dmckee 2010-02-05 15:32:21

我注意到,

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

总是正确的。因为如果字符是32它是不是9,和真或假的是真的......

你大概的意思

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

&&而不是||。解决了我的问题,程序现在继续如何应对。我确实有另外一个问题,你可以在原始文章中看到编辑的更多细节 – Blackbinary 2010-02-05 15:40:06

+0

oops double post – Blackbinary 2010-02-05 15:41:10

+0

为什么转换为'int'? – 2010-02-05 22:34:56

它可能会更好,只是比较反对你考虑空白的特定字符,也使用& &:

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

是的,我知道这是一个有效的方法。我实际上以另一种方式尝试了这一点。但不管我如何告诉它以避免字符是空格或制表符,它不会。 – Blackbinary 2010-02-05 15:35:40

+0

@Blackbinary:因为你正在检查错误的东西:你可以这样做:'if(c!=''&& c!='\ t')'等等,它会起作用。 – 2010-02-05 15:38:27

+0

我同意Alok,我没有考虑代码,但每个角色总是会变成!=''或!='\ t'。我会更新我的代码,没有发现问题 – 2010-02-05 15:52:52

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

if (c == ' ') 

会工作,更容易阅读,并且是便携式的。

如果你想跳过所有空白,你应该使用#include <ctype.h>,然后使用isspace()

if (isspace((unsigned char)c)) 

编辑:正如有人说,你的病情检查“没有空间”是错误的,但上述观点仍然适用。所以,你的情况可以换成:

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

我认为更多的代码可能是必要的。坚持下去,我会尝试一些建议的东西(主要是&&而不是||) – Blackbinary 2010-02-05 15:37:55

+0

@Blackbinary:请参阅我的编辑:你可能不需要更多的代码,但你应该用'if( !isspace(...))'无论如何。 – 2010-02-05 15:39:34

+0

为使用适当的图书馆! – rampion 2010-02-05 19:07:29