0

我整天都在做这件事,但没有运气。现在是晚上,不知道该怎么办。我的任务是读取用户输入句子中元音的数量、空格的数量和其他字符的数量。我知道我需要将 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

4 回答 4

3

这条线

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

是不是按照你的想法去做。它总是会返回 true。

你需要

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

并删除该行末尾的分号

于 2012-02-08T03:10:35.320 回答
1

这里:

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 */ }
于 2012-02-08T03:14:22.243 回答
0

您可以以完全相同的方式检查空格。常见的空白字符是空格 ( ' ') 和水平制表符 ( '\t')。不太常见的是换行符 ( '\n')、回车符 ( )、换页'\r'( '\f') 和垂直制表符 ( '\v')。

您也可以使用isspacefrom ctype.h

于 2012-02-08T03:20:46.170 回答
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;
}

没有数组

于 2012-02-08T03:35:01.957 回答