Wordcount в C, который поддерживает ввод букв
У меня есть некоторые проблемы с правильным подсчетом слов, так как пропущено единственное число, такое как "Я".
По существу, если пробел между символом / символом или отдельным символом / символом будет подсчитывать количество слов.
#include <stdio.h>
int main()
{
int wordcount;
int ch;
char lastch = -1;
wordcount = 0;
while ((ch = getc(stdin)) != EOF) {
if (ch == ' ' || ch == '\n')
{
if (!(lastch == ' ' && ch == ' '))
{
wordcount++;
}
}
lastch = ch;
}
printf("The document contains %d words.", wordcount);
}
1 ответ
Вы чрезмерно усложняете свои условные тесты. Если я понимаю вашу цель, единственное, что вас беспокоит, это если lastch != ' '
и либо (ch == ' ' || ch == '\n')
,
Дополнительно, getchar
возвращает тип int
, Следовательно, ch
должно быть типа int
правильно обнаружить EOF
на всех системах.
Упрощая эти изменения, вы можете сделать что-то похожее на:
#include <stdio.h>
int main (void) {
int wordcount = 0,
lastch = 0, /* just initialize to zero */
ch; /* ch should be an int */
while ((ch = getc (stdin)) != EOF) {
if (lastch && lastch != ' ' && (ch == ' ' || ch == '\n'))
wordcount++;
lastch = ch;
}
if (lastch != '\n') /* handle no '\n' on final line */
wordcount++;
printf ("The document contains %d %s.\n",
wordcount, wordcount != 1 ? "words" : "word");
return 0;
}
Пример использования / Вывод
$ echo " " | ./bin/wordcnt
The document contains 0 words.
$ echo " t " | ./bin/wordcnt
The document contains 1 word.
$ echo " t t " | ./bin/wordcnt
The document contains 2 words.
Примечание: для защиты от углового случая файла, не содержащего POSIX eof
(например '\n'
в конце файла), вам нужно будет добавить дополнительный флаг, чтобы был найден хотя бы один символ, и проверить lastch
в комбинации после выхода из цикла, например
#include <stdio.h>
int main (void) {
int wordcount = 0,
lastch = 0, /* just initialize to zero */
ch, /* ch should be an int */
c_exist = 0; /* flag at least 1 char found */
while ((ch = getc (stdin)) != EOF) {
if (lastch && lastch != ' ' && (ch == ' ' || ch == '\n'))
wordcount++;
if (ch != ' ' && ch != '\n') /* make sure 1 char found */
c_exist = 1;
lastch = ch;
}
if (c_exist && lastch != '\n') /* handle no '\n' on final line */
wordcount++;
printf ("The document contains %d %s.\n",
wordcount, wordcount != 1 ? "words" : "word");
return 0;
}
Пример углового случая
$ echo -n " t" | ./bin/wordcnt
The document contains 1 word.