我在统计中文的时候出现了问题,请各位大神指教一下
#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,一个常数);改成这样就行了