c++统计用户输入的字符串的空格字符,英文字符,数字个数,其他字符个数以及用户输入字符串的长度

我在统计中文的时候出现了问题,请各位大神指教一下
#include
#include
using namespace std;
int main()
{

string str;
cout << "请输入一个字符串,以换行为结束!\n";
getline(cin, str);
size_t count = 0;
size_t spaceNum=0;
size_t letter=0;
size_t chineseNum=0;
size_t other=0;
for(size_t i = 0; i < str.size(); i++) //如果变量i 小于等于字符串str长度的时候,就继续循环,反之 循环结束
    if(isdigit(str[i])) //判断是否是数字
        count++;
    else if(isspace(str[i]))//判断是否是空格
        ++spaceNum;
    else if(isalpha(str[i]))//判断是否是字母
        ++letter;

    else if(str[0]>=0xB0)
        ++chineseNum;

    else
        ++other;


cout<<"字符串所占字节"<<sizeof str<<"\n"<<endl;
cout << "数字的个数为: " << count <<"\n"<< endl;
cout<<"空格的个数是"<<spaceNum<<"\n"<<endl;
cout<<"字母的个数是"<<letter<<"\n"<<endl;
cout<<"其他字符的个数是"<<other<<"\n"<<endl;
cout<<"中文的个数是"<<chineseNum<<"\n"<<endl;



system("pause");

}

我发现你所显示的代码中函数没有反回值

一个中文占两个字符,当你判断到是汉字时,还是 i++就不对了吧

else if(str[0]>=0xB0)(str[0]<0来判断是否中文)

str[i]不是str[0]

逻辑上出问题了吧,你统计中文,但除了你的那几个if,else的情况,还是有情况既不是中又不是字母,数字,而是符号吧

中文是占二个字节的。你的代码实现不了这个功能

将string str;换为char str[一个常数];cin.getline(str,一个常数);改成这样就行了