Я реализовал этот код для получения no. количества слов. Он отлично работает для всех одиночных символов, то есть если я ввожу "q w r "
в качестве ввода, он дает мне 3 слова, но когда я ввожу "qwe ed df "
в качестве ввода, он отображает 2.
#include<stdio.h>
int main()
{
int c=getchar();
int words=0;
while(c!=EOF)
{
if(c==' ' || c=='\n')
{
c=getchar();
}
else if(c>='a' && c<='z')
{
c=getchar();
if(c==' ')
{
words=words+1;
c=getchar();
}
else
{
c=getchar();
}
}
}
printf("%i\n",words);
}
while ((c = getchar()) != EOF)
— вы получаете кредит за использованиеint c;
, а неchar c;
, кстати — а затем в цикле отслеживайте «я в слове». Если вы в слове и читаете без пробела, вы все равно в слове. Если вы в слове и читаете пробел, вы закончили слово (и больше не находитесь в слове). Если вы не в слове и получаете символ без пробела, вы теперь в слове; увеличить счетчик слов. Если вы не в слове и получаете пробел, вы все равно не в слове. Заголовок<ctype.h>
содержит макросы классификации символов. - person Jonathan Leffler   schedule 15.08.2016ungetc
. - person BLUEPIXY   schedule 15.08.2016char buf[1024] = ""; while (fgets (buf, 1024, stdin)) { char *p = buf; [your logic here]}
). Причина в том, что операции в памяти выполняются на порядки быстрее, чем файловый ввод-вывод по одному символу за раз. (вы можете выбрать размерbuf
любым, имеющим смысл. вы увидите значительное улучшение с буферами размером всего 8 символов) - person David C. Rankin   schedule 15.08.2016