首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-04 
这个问题怎么解决(输出问题)#includecstdlib#includeiostream#includemap#includestringusingname

这个问题怎么解决(输出问题)
#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的数字转换成了整型的数字

热点排行