Нужно читать пробелы и другие символы C ++ - PullRequest
0 голосов
/ 08 февраля 2012

Я работал над этим весь день без удачи. Сейчас его ночь, и я не знаю, что делать. Мое назначение - прочитать количество гласных, количество пробелов и количество других символов в предложении, введенном пользователем. Я знаю, что мне нужно использовать cin.get (ch) для пробелов, но не знаю как. Мне также нужно вывести предложение в файл. Вот что у меня так далеко:

//Get data from user 
cout << "Enter your sentence on one line followed by a # to end it: " << endl;



while (cin >> noskipws >> character && character != '#')
{
    character = static_cast<char>(toupper(character));

    if (character == 'A' || character == 'E' || character == 'I' ||
            character == 'O' ||  character == 'U')
    {
        vowelCount++;
        isVowel = true;

    }

    if (isspace(character))
    {
        whiteSpace++;

    }

    else if (isVowel == true && isspace(character))
    {
        otherChars++;
    }

    outFile << character;

}


outFile << "vowelCount: " << vowelCount << endl;
outFile << "whiteSpace: " << whiteSpace << endl;
outFile << "otherchars: " << otherChars << endl;

Ответы [ 4 ]

3 голосов
/ 08 февраля 2012

Эта строка

if (character == 'A' || 'E' || 'I' || 'O' || 'U');

Не делает то, что вы думаете.Он всегда вернет true.

вам нужно

if (character == 'A' || character == 'E' || character == 'I' || character == 'O' || character =='U')

и удалите точку с запятой также в конце этой строки

0 голосов
/ 08 февраля 2012
#include <iostream>

using namespace std;

int main()
{
    char ch;
    int vowel_count = 0;
    int space_count = 0;
    int other_count = 0;

    cout << "Enter a string ends with #: " << endl;

    while(1)
    {
        cin.get(ch);
        if(ch == '#')
        {
            break;
        }

        if(ch == 'A' || ch == 'a'
            || ch == 'E' || ch == 'e'
            || ch == 'I' || ch == 'i'
            || ch == 'O' || ch == 'o'
            || ch == 'U' || ch == 'u')
        {
            ++vowel_count;
        }
        else if(ch == ' ')
        {
            ++space_count;
        }
        else
        {
            ++other_count;
        }
    }


    cout << "Vowels: " << vowel_count << endl;
    cout << "White spaces: " << space_count << endl;
    cout << "Other: " << other_count << endl;

    return 0;
}

Нет массивов

0 голосов
/ 08 февраля 2012

Вы можете проверить пробелы точно так же. Обычные пробельные символы - это пробел (' ') и горизонтальная табуляция ('\t'). Менее распространенными являются перевод строки ('\n'), возврат каретки ('\r'), подача формы ('\f') и вертикальная табуляция ('\v').

Вы также можете использовать isspace из ctype.h.

0 голосов
/ 08 февраля 2012

Здесь:

while (cin >> character && character != '#')

Вы пропускаете все пробелы. Чтобы оператор >> не мог пропустить пробелы, вам нужно явно указать это с помощью модификатора noskipws.

while(std::cin >> std::noskipws >> character && character != '#')

В качестве альтернативы тот же эффект может быть достигнут с помощью get

while(std::cin.get(character) && character != '#')

Далее вы читаете больше символов вне условия цикла.

cin.get(character);

У вас уже есть значение в переменной 'персонаж'. Так что удалите оба из них. Следующая итерация цикла (в условии while) получит следующий символ (так как он выполняется до входа в цикл).

Тогда исправь тест, как указал Тим.
Затем вы можете добавить еще один тест для пробелов с помощью:

if (std::isspace(character)) // Note #include <cctype> 
{  /* STUFF */ }
...