读书人

这个有关问题如何解决(输出有关问题)

发布时间: 2012-03-04 11:13:33 作者: rapoo

这个问题怎么解决(输出问题)
#include <cstdlib>
#include <iostream>
#include <map>
#include <string>

using namespace std;

map <int,int> m1;
map <char,int> m2;
string s;
int cnt;

int main(int argc, char *argv[])
{
cout < < "Input string: " < <ends;
cin> > s;
for(string::iterator ix=s.begin();ix!=s.end();ix++){
if(isdigit(*ix)){
cnt=count(s.begin(),s.end(),*ix);
m1[*ix]=cnt;}
else{
cnt=count(s.begin(),s.end(),*ix);
m2[*ix]=cnt;
}
}
for(map <int,int> ::iterator it=m1.begin();it!=m1.end();it++)
cout < < "数字: " < <(*it).first < < " 出现: " < <(*it).second < < "次. " < <endl;
for(map <char,int> ::iterator it=m2.begin();it!=m2.end();it++)
cout < < "字母: " < <(*it).first < < " 出现: " < <(*it).second < < "次. " < <endl;

system( "PAUSE ");
return EXIT_SUCCESS;
}


我觉得应该是
输入:
11av
输出:
数字:1 出现:2次.


字母:a 出现:1次.
字母:v 出现:1次.

但是.
我的DEV-c++结果是
数字:49 出现:2次.
字母:a 出现:1次.
字母:v 出现:1次.

为什么,,高手指点一下

[解决办法]
注意你输入的是 "11av ",string::iterator的referance_type是char&(或其他可以直接转成char&的类型),所以第一和第二个*(ix)返回的是 '1 '而不是1。将字符 '1 '赋给一个int,得到的是它的ASCII码。
如果想要文中希望的语义,可以在if(isdigit(*ix)) 段中这样写
cnt=count(s.begin(),s.end(),*ix);
m1[(*ix)- '0 ']=cnt; // (*ix)- '0 ' 将ASCII的数字转换成了整型的数字

读书人网 >C++

热点推荐