识别文本中的空格
Posted
技术标签:
【中文标题】识别文本中的空格【英文标题】:Recognizing Spaces in text 【发布时间】:2011-01-13 13:47:32 【问题描述】:我正在编写一个程序来破译基本文本文件中给出的句子、音节和单词。
程序一个字符一个字符地循环文件。
它首先查看它是否是某种句尾标记,例如!
?
:
;
或.
。
然后,如果该字符不是空格或制表符,则假定它是一个字符。
最后,它确定如果它是空格或制表符,并且它之前的最后一个字符是有效的字母/字符(例如,不是句尾标记),那么它就是一个单词。
我对细节有点了解,但这是我遇到的问题。 我的字数等于我的句子数。这解释为,它意识到当有句尾标记时单词停止,但真正的问题是空格被认为是有效字母。
这是我的 if 语句,用于确定所讨论的字符是否是单词中的有效字母:
else if(character != ' ' || character != '\t')
到那时,我已经在程序中排除了句末标记。 (如果实际上是原始的)。从 Ascii 表中读取,32 应该是空格字符。 但是,当我输出所有进入该代码块的字符时,就会出现空格。
那我做错了什么?如果出现这种情况,我该如何阻止空间通过?
提前致谢,我感觉这个问题可能有点含糊,或者措辞不当。如果您有任何问题或需要澄清,请告诉我。
【问题讨论】:
哎呀!使用字符文字,伙计!使您的代码都更难阅读和依赖于字符集是没有意义的。像这样character != ' '
... 并使用 '\t'
作为标签。
【参考方案1】:
您不应该依赖实际的字符数字:这取决于您的平台使用的编码,并且可能不是 ASCII。您可以通过简单地对其进行测试来检查任何特定字符。例如,要测试c
是否为空格字符:
if (c == ' ')
可以工作,更容易阅读,并且便于携带。
如果你想跳过所有的空白,你应该使用#include <ctype.h>
,然后使用isspace()
:
if (isspace((unsigned char)c))
编辑:正如其他人所说,您检查“不是空格”的条件是错误的,但上述观点仍然适用。因此,您的条件可以替换为:
if (!isspace((unsigned char)c))
【讨论】:
我认为可能需要更多代码。等一下,我会尝试一些建议的东西(主要是 && 而不是 || ) @Blackbinary:请看我的编辑:您可能不需要更多代码,但无论如何您应该用if (!isspace(...))
替换您的条件。
很高兴使用正确的库!【参考方案2】:
我注意到了
(character != 32 || character != 9)
总是正确的。因为如果字符是 32 则不是 9,并且 true OR false 为 true...
你可能是说
(character != ' ' && character != '\t')
【讨论】:
用 && 代替 ||解决了我的问题,程序现在按照它应该的方式进行。不过我确实有另一个问题,您可以在原始帖子中查看编辑以获取更多详细信息 @Thomas:因为它在原始代码中并且——发现了逻辑错误和字符串文字——我忙于打字并停止思考。基本的剪切粘贴错误。谢谢。【参考方案3】:最好只与您认为空白的特定字符进行比较,也可以使用 &&:
if ((character != ' ') &&
(character != '\t'))
【讨论】:
是的,我知道这是一种有效的方式。我实际上在另一种方式之前尝试过这个。但无论我如何告诉它避免使用空格或制表符,它都不会。 @Blackbinary:因为你检查错了:你可以这样做:if (c != ' ' && c != '\t')
等等,它会起作用。
我同意 Alok 的观点,我没有考虑代码,但每个字符总是会是 != ' ' OR != '\t'。我会更新我的代码,没有发现这个问题以上是关于识别文本中的空格的主要内容,如果未能解决你的问题,请参考以下文章