2010-02-05 4 views
0

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

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

Greetings, earthlings.. 

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

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

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

Спасибо, и если вам нужно уточнение или что-то еще, сообщите мне.

ответ

4

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

+0

Это отличная идея, спасибо большое. Я точно понимаю, что вы имеете в виду, я удивлен, что не думал об этом. Благодаря! – Blackbinary

+0

Я также предлагаю вам читать в блоках символов либо по строке, либо по количеству. В общем, чтение из памяти происходит быстрее и обычно проще отлаживать (вы можете видеть прошлые и будущие буквы). –

0

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

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

+0

Это звучит намного сложнее, чем я пытаюсь. Существует определенный набор правил для определения предложений, слов и слогов. Которые я могу покрыть с помощью утверждений if. – Blackbinary