2 zhjianglin zhjianglin 于 2014.12.20 16:35 提问

c++统计用户输入的字符串的空格字符,英文字符,数字个数,其他字符个数以及用户输入字符串的长度
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");

}

7个回答

u013337963
u013337963   2014.12.20 16:41

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

zhjianglin
zhjianglin 没有返回值会导致程序终止么
接近 3 年之前 回复
bdmh
bdmh   Ds   Rxr 2014.12.20 16:41

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

zhjianglin
zhjianglin 那该怎么做
接近 3 年之前 回复
zsc2014030403015
zsc2014030403015   2014.12.20 17:06

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

zsc2014030403015
zsc2014030403015 回复zhjianglin: 程序本来就有错误,你下个vs2012来跑一下程序就知道有错误了
接近 3 年之前 回复
zhjianglin
zhjianglin 还是不行 当输入中文的时候程序直接中止了
接近 3 年之前 回复
zsc2014030403015
zsc2014030403015   2014.12.20 17:07

str[i]不是str[0]

zsc2014030403015
zsc2014030403015 回复zhjianglin: 不换i就只会取第一个字符,不会i个
接近 3 年之前 回复
zhjianglin
zhjianglin 能说详细点吗
接近 3 年之前 回复
u014692369
u014692369   2014.12.20 22:47

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

zhjianglin
zhjianglin 其他的用的onther统计的
接近 3 年之前 回复
lovesmiles
lovesmiles   Rxr 2014.12.22 17:23

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

zsc2014030403015
zsc2014030403015   2014.12.23 16:42

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

Csdn user default icon
上传中...
上传图片
插入图片