2012-02-08 9 views
0

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

//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; 
+0

Вы должны получить вместе с [user1193717] (http://stackoverflow.com/users/1193717/user1193717) выглядит, как вы принимаете тот же класс. Поделитесь идеями и заметками, возможно, это упростит. –

+0

Возможный дубликат [C++ simple IO vowel count program] (http://stackoverflow.com/questions/9186231/c-simple-io-vowel-count-program) – SingerOfTheFall

ответ

0
#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

не разрешено использовать массивы: (также должен тестироваться для других персонажей, которые не являются гласными и пробелами, поэтому не знаю, do – user1196155

+0

Это так плохо делать домашнее задание, желаю, чтобы вы не программист – shengy

+0

do u думаю, что я слишком тупой, чтобы быть программистом? – user1196155

3

Эта линия

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

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

вам нужно

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

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

0

Здесь:

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

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

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

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

получить
while(std::cin.get(character) && character != '#') 

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

cin.get(character); 

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

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

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

i, отредактированный выше. Но будет ли это проходить и считать все пробелы в предложении? Также как я могу заставить его печатать текст outFile с пробелами, характер по характеру? – user1196155

+0

в соответствии с назначением, я должен использовать: cin.get (ch), чтобы получить пробелы – user1196155

+0

@ user1196155: Обновлено для использования cin.get(). –

0

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

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

+0

Можете ли вы показать мне, как вы это сделаете с помощью ''? Потому что я пробовал это раньше, и он не сообщает мне всех персонажей с пробелами в предложении. – user1196155

+0

в соответствии с назначением, я должен использовать: cin.get (ch), чтобы получить пробелы – user1196155

+0

Я не совсем понимаю, какова ваша проблема. Почему вы не можете проверить пробелы точно так же, как вы проверяете гласные? –

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

  • Нет связанных вопросов^_^