我正在编写一个解码基本文本文件中给出的句子,音节和单词的程序。
程序逐字符循环文件。
它首先查看它是否是某种句末标记,例如!
?
:
;
或.
。
然后,如果字符不是空格或制表符,则假定它是字符。
最后,它确定如果它是空格或制表符,并且它之前的最后一个字符是有效的字母/字符(例如,不是句末标记),则它是一个单词。
我对细节有点了解,但这是我遇到的问题。 我的字数等于我的句子数。这解释的是,它是否意识到当一个句子结束标记时,一个单词停止,但真正的问题是空格被认为是有效字母。
继承我的if语句,以确定有问题的字符是否是单词中的有效字母:
else if(character != ' ' || character != '\t')
我已经排除了程序中那一点的句末标记。 (原来如果实际上)。从读取Ascii表时,32应该是空格字符。 但是,当我输出所有使其成为该代码块的字符时,空格就在那里。
那么我做错了什么?如果能阻止空间通过这个?
先谢谢,我觉得这个问题可能有点含糊不清,或措辞不合理。如果您有任何问题或需要澄清,请告诉我。
答案 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'))