把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;
}
因为数组没有初始化,里面的未初始化值归到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
$
*/