需要读取空格和其他字符C ++

时间:2012-02-08 03:06:13

标签: c++ io while-loop chars

我整天都在努力,没有运气。它现在的夜晚,不知道该怎么办。我的任务是读取用户输入的句子中的元音数,空格数和其他字符数。我知道我需要将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 个答案:

答案 0 :(得分:3)

这一行

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

没有做你的想法。它总会回归真实。

你需要

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

并在该行的末尾删除分号

答案 1 :(得分:0)

下面:

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

您正在跳过所有空白区域。为了防止运营商&gt;&gt;从滑动白色空间你需要使用noskipws修饰符明确指定它。

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

或者,使用get

可以实现相同的效果
while(std::cin.get(character) && character != '#')

接下来,您正在读取循环条件之外的更多字符。

cin.get(character);

你已经在变量'character'中有了一个值。所以删除这两个。循环的下一次迭代(在while条件中)将获得下一个字符(因为它在输入循环之前执行)。

然后按照蒂姆指出的那样修好你的测试 然后,您可以使用以下命令为空白区域添加另一个测试:

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

答案 2 :(得分:0)

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

您还可以使用isspace中的ctype.h

答案 3 :(得分: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;
}

没有数组