2014-10-31 1 views
0
#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    unsigned long c; 
    unsigned long line; 
    unsigned long word; 
    char ch; 

    c = 0; 
    line = 0; 
    word = 0; 

    while((ch = getchar()) != EOF) 
    { 
     C++; 
     if (ch == '\n') 
     { 
      line ++; 
     } 
     if (ch == ' ' || ch == '\n' || ch =='\'') 
     { 
      word ++; 
     } 
    } 
    printf("%lu %lu %lu\n", c, word, line); 
    return 0; 
} 

Моя программа работает отлично по большей части, но когда я добавляю дополнительные пробелы, она учитывает пробелы как дополнительные слова. Так, например, Не считая пробелов как слов в c

How  are  you?
считается 10 словами, но я хочу, чтобы он считался как 3 слова вместо этого. Как я могу изменить свой код, чтобы заставить его работать?

+0

Вы должны изменить свою логику на * not * count (т. Е. Не увеличивать слово '), когда вы видите последовательные пробелы. –

+2

Это потому, что вы закодировали 'if (ch == '' ...) слово ++;'. Каждое прочитанное вами пространство увеличит количество слов. –

+0

Эта строка: while ((ch = getchar())! = EOF) завершится ошибкой, поскольку ch определяется как char, а EOF - это int, длина которого больше, чем char, поэтому сравнение всегда приведет к ложному, поэтому цикл никогда не выйдет. – user3629249

ответ

-1

Это один из возможных решений:

#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    unsigned long c; 
    unsigned long line; 
    unsigned long word; 
    char ch; 
    char lastch = -1; 

    c = 0; 
    line = 0; 
    word = 0; 

    while((ch = getchar()) != EOF) 
    { 
     C++; 
     if (ch == '\n') 
     { 
      line ++; 
     } 
     if (ch == ' ' || ch == '\n' || ch =='\'') 
     { 
      if (!(lastch == ' ' && ch == ' ')) 
      { 
       word ++; 
      } 
     } 
     lastch = ch; 
    } 
    printf("%lu %lu %lu\n", c, word, line); 
    return 0; 
} 

Надеются, что это помогло, удачи!

+0

Должно ли 'lastch = ch;' быть в конце цикла, но с 'lastch = -1' до начала цикла? –

+0

@WeatherVane Да, WHOOPS! Фиксация ... – phantom

+0

@WeatherVane Там мы идем, спасибо :) – phantom

0

Я нашел способ подсчета слов и между ними несколько пробелов программа будет рассчитывать только слова, а не несколько пробелов, также как слова вот код:

nbword это количество слов, c является набранный символ и prvc является ранее введенным символом.

#include <stdio.h> 

int main() 
{ 
    int nbword = 1; 
    char c, prvc = 0; 

    while((c = getchar()) != EOF) 
    { 
     if(c == ' ') 
     { 
      nbword++; 
     } 
     if(c == prvc && prvc == ' ') 
      nbword-; 
     if(c == '\n') 
     { 
      printf("%d\n", nbword); 
      nbword = 1: 
     } 
     prvc = c; 
    } 
    return 0: 
} 
+1

Пожалуйста, не включайте изображения своего кода и не включайте сам код, который вы отправили. Вы можете отредактировать свой ответ (https://stackoverflow.com/posts/46503695/edit). – LW001

Смежные вопросы