getchar () и подсчет предложений и слов в C - PullRequest
0 голосов
/ 05 февраля 2010

Я создаю программу, которая следует определенным правилам для подсчета слов, слогов и предложений в данном текстовом файле.

Предложение - это набор слов, разделенных пробелом, который заканчивается на. или же ! или же ? Однако это тоже предложение:

Greetings, earthlings..

Я подошел к этой программе так, чтобы сканировать текстовый файл по одному символу за раз, используя getchar (). Мне запрещено работать со всем текстовым файлом в памяти, это должен быть один символ или слово за раз.

Вот моя дилемма: с помощью getchar () я могу узнать, что является текущим персонажем. Я просто продолжаю использовать getchar () в цикле, пока он не найдет символ EOF. Но если предложение имеет несколько периодов в конце, оно все равно остается одним предложением. Это значит, что мне нужно знать, каким был последний персонаж перед тем, который я анализирую, и тем, после него. С моей точки зрения, это будет означать еще один вызов getchar (), но это создаст проблемы, когда я начну сканировать следующий символ (теперь он пропускает символ).

У кого-нибудь есть предложение относительно того, как я могу определить, что вышеприведенное предложение действительно является предложением?

Спасибо, и если вам нужно разъяснение или что-то еще, дайте мне знать.

Ответы [ 2 ]

4 голосов
/ 05 февраля 2010

Вам просто нужно реализовать очень простой конечный автомат . Как только вы нашли конец предложения, вы остаетесь в этом состоянии до тех пор, пока не найдете начало нового предложения (обычно это не символ пробела, отличный от терминатора, например.! Или?).

0 голосов
/ 05 февраля 2010

Вам нужна расширяемая грамматика. Посмотрите, например, на регулярные выражения и попробуйте построить их.

Обычно человеческий язык разнообразен и не может быть легко проанализирован, особенно если у вас есть разговорная речь для анализа или разные языки. В некоторых языках может быть даже неясно, в чем состоит различие между словом и предложением .

...