识别文本中的空格

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'。我会更新我的代码,没有发现这个问题

以上是关于识别文本中的空格的主要内容,如果未能解决你的问题,请参考以下文章

如何通过正则表达式识别文本中的段落?

TipTap 编辑器中无法正确识别空格

扩展时如何让 emmet 识别类名中的空格?

markdown 怎样敲出能够识别代码区块的空格

R语言读取的文本中的空格如何保留?

如何识别作为光学字符识别 (OCR) 输出的文本中的实体?