C++统计字符 运行结果为什么会这样 哪里出错了?

img

img


为什么我输入的所有字符都计成了other,麻烦指出代码哪里出现了问题?谢谢!

把cin.getline(a.10);
改成cin >> b[i];才是你想要的
要么你就别把cin.getline(a.10);放在循环里面,因为getline每次是读取字符串。
所以当你出循环时候你最后输入的字符是空的,所以数组a里面下标0-8是未初始化的值,下标9是你输入的空字符串。
代码中的字符范围判断没什么问题。
这个程序你可以拿去测试,看看getline到底把什么数据写入数组了
注意:
cin.getline(b,10);是将b[9]写成‘\0’了,因此你需要使用b[11]去读取10个元素

#include <iostream>

using namespace std;


int main()
{
    char b[11];
    cin.getline(b,11);
    
    int q = 0, w = 0, e = 0, r = 0;

    for (int i = 0; i < 10; i++)
    {
        cout<< b[i]<<endl;
    }
    for (int i = 0; i < 10; i++)
    {
        if (b[i] >= 'a'&&b[i] <= 'z' || b[i] >= 'A'&&b[i] <= 'Z')
            q++;
        else if (b[i] >= ' '&&b[i] <= '\r')
            w++;
        else if (b[i] >= '0'&&b[i] <= '9')
            e++;
        else
            r++;

    }
    
    cout << q << w << e << r;
    return 0;
}

img

因为数组没有初始化,里面的未初始化值归到other。
不要发截图,代码和问题都用文字发。


#include <iostream>
using namespace std;

int main()
{
    auto letter = 0, blank = 0, digit = 0, punct = 0;
    for (auto i = 0; i != 3; i++)
    {
        string line;
        getline(cin, line);
        cout << "\tsize: " << line.size() << endl << endl;
        for (auto i = 0; i != line.size(); i++)
        {
            if (isalpha(line[i]))
            {
                letter++;
            }
            else if (isblank(line[i]))
            {
                blank++;
            }
            else if (isdigit(line[i]))
            {
                digit++;
            }
            else if (ispunct(line[i]))
            {
                punct++;
            }
        }
    }

    cout << "letter: " << letter << endl;
    cout << "digit: " << digit << endl;
    cout << "blank: " << blank << endl;
    cout << "punct: " << punct << endl;
}

/*
$ make && ./main 
c++ -g -std=c++2a  -MMD -MP -I/Users/ljh/Downloads/boost  -c -o main.o main.cpp
c++     main.o   -o main
12345678
        size: 8

abcd
        size: 4

a  b12, .
        size: 9

letter: 6
digit: 10
blank: 3
punct: 2
$ 
*/