Как мне посчитать буквы в каждом слове списка слов? - PullRequest
0 голосов
/ 13 августа 2011

Поскольку код в настоящее время, он выводит:

hjk
hg
kjgj
Word 0: 12
Word 1: 0
Word 2: 0

Когда это должно быть:

Word 0: 3
Word 1: 2
Word 2: 4

Я не знаю, что я делаю неправильно, вот код:

#include <stdio.h>

#define MAX_WORDS_COUNT 10

main()
{
    int wordsLength[MAX_WORDS_COUNT];
    int i, c, inspace = 0, currWord = 0;
    for (i = 0; i < MAX_WORDS_COUNT; i++) 
        wordsLength[i] = 0;

    while ((c = getchar()) != EOF) {
        if (c != ' ' || c != '\t' || c != '\n') {
            wordsLength[currWord]++;
            inspace = 0;
        } else {
            if (inspace == 0)
                currWord++;
            inspace = 1;
        }   
    }

    for(i = 0; i < MAX_WORDS_COUNT; i++)
        printf("Word %d: %d\n", i, wordsLength[i]);


}

Ответы [ 2 ]

6 голосов
/ 13 августа 2011
    if (c != ' ' || c != '\t' || c != '\n') {

Вы должны использовать &&. У вас есть 3 взаимоисключающих условия, и вы выполняете ИЛИ, что означает, что ВСЕ условия удовлетворяют этому.

    if (c != ' ' && c != '\t' && c != '\n') {

будет работать.

2 голосов
/ 13 августа 2011

Вы хотите && вместо || в вашем состоянии ... в противном случае посмотрите вывод, который вы опубликовали, он думает, что все 12 символов принадлежат одному слову.

Измените это: if (c != ' ' || c != '\t' || c != '\n')

Кому: if (c != ' ' && c != '\t' && c != '\n')

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