我正在创建一个遵循某些规则的程序,以计算给定文本文件中的单词,音节和句子的数量。
句子是由以空格结尾的空格分隔的单词集合。要么 !要么 ? 但是,这也是一句话:
Greetings, earthlings..
我接触这个程序的方法是使用getchar()一次扫描一个字符的文本文件。我被禁止使用内存中的整个文本文件,它一次只能是一个字符或单词。
这是我的困境:使用getchar()我可以找出当前角色是什么。我只是继续在循环中使用getchar(),直到找到EOF字符。但是,如果句子最后有多个句号,那么它仍然只是一个句子。这意味着我需要知道在我分析之前最后一个角色是什么,以及之后的角色。通过我的想法,这将意味着另一个getchar()调用,但当我去扫描下一个字符(它现在跳过一个字符)时,这会产生问题。
有没有人建议如何确定上述句子,确实是一句话?
谢谢,如果您需要澄清或其他任何事情,请告诉我。
答案 0 :(得分:4)
您只需要实现一个非常简单的state machine。一旦你找到一个句子的结尾,你就会保持这种状态,直到你找到一个新句子的开头(通常这将是一个非白色空格字符,而不是终结符,如。!或?)。
答案 1 :(得分:0)
您需要一个可扩展的语法。查看正则表达式的示例并尝试构建一个。
一般来说,人类语言是多样的,不易解析,特别是如果你要分析口语或不同的语言。在某些语言中,甚至可能不清楚单词和句子之间的区别。