在文本中识别空间

Bla*_*ary 2 c logic whitespace character

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

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

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

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

else if(character != ' ' || character != '\t')
Run Code Online (Sandbox Code Playgroud)

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

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

在此先感谢,我觉得这个问题可能有点模糊,或者说措辞不好.如果您有任何问题或需要澄清,请告诉我.

Alo*_*hal 8

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

if (c == ' ')
Run Code Online (Sandbox Code Playgroud)

将工作,更容易阅读,并且是便携式的.

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

if (isspace((unsigned char)c))
Run Code Online (Sandbox Code Playgroud)

编辑:正如其他人所说,你检查"不是空格"的条件是错误的,但上述观点仍然适用.所以,您的病情可以替换为:

if (!isspace((unsigned char)c))
Run Code Online (Sandbox Code Playgroud)