识别文本中的空格
我正在编写一个程序,用于解读基本文本文件中给出的句子,音节和单词。识别文本中的空格
程序循环遍历文件逐个字符。 它首先看看它是否是某种类型的句末标记,如!
?
:
;
或.
。 然后,如果角色不是空格或制表符,则认为它是角色。 最后,它确定如果它是一个空格或制表符,并且它之前的最后一个字符是有效的字母/字符(例如,不是句尾结束标记),则它是一个单词。
我对细节稍微有点了解,但这里是我的问题。 我的字数相当于我的句数。这解释的是,它是否意识到,当有句末尾的标记时,一个单词会停止,但真正的问题是空格被认为是有效的字母。
我的继承人if语句,以决定是否有问题的字符是一个字一个有效的一封信:
else if(character != ' ' || character != '\t')
我已经通过程序中的该点排除结束句标记。 (如果真的在原文中)。从阅读Ascii表格中,32应该是空格字符。 但是,当我输出所有使它进入该代码块的字符时,空间就在那里。
那么我做错了什么?我如何阻止空间通过这个如果?
在此先感谢,我有一种感觉,这个问题可能有点模糊,或措辞不佳。如果您有任何疑问或需要澄清,请告诉我。
我注意到,
(character != 32 || character != 9)
总是正确的。因为如果字符是32它是不是9,和真或假的是真的......
你大概的意思
(character != ' ' && character != '\t')
&&而不是||。解决了我的问题,程序现在继续如何应对。我确实有另外一个问题,你可以在原始文章中看到编辑的更多细节 – Blackbinary 2010-02-05 15:40:06
oops double post – Blackbinary 2010-02-05 15:41:10
为什么转换为'int'? – 2010-02-05 22:34:56
它可能会更好,只是比较反对你考虑空白的特定字符,也使用& &:
if ((character != ' ') &&
(character != '\t'))
是的,我知道这是一个有效的方法。我实际上以另一种方式尝试了这一点。但不管我如何告诉它以避免字符是空格或制表符,它不会。 – Blackbinary 2010-02-05 15:35:40
@Blackbinary:因为你正在检查错误的东西:你可以这样做:'if(c!=''&& c!='\ t')'等等,它会起作用。 – 2010-02-05 15:38:27
我同意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))
我认为更多的代码可能是必要的。坚持下去,我会尝试一些建议的东西(主要是&&而不是||) – Blackbinary 2010-02-05 15:37:55
@Blackbinary:请参阅我的编辑:你可能不需要更多的代码,但你应该用'if( !isspace(...))'无论如何。 – 2010-02-05 15:39:34
为使用适当的图书馆! – rampion 2010-02-05 19:07:29
哎呀!使用字符文字,男人!没有意义让你编码*两者都更难以阅读和依赖字符集。就像这个'character!='''...并且使用''\ t''作为标签。 – dmckee 2010-02-05 15:32:21