您的位置:程序门 -> c/c++ -> c++ 语言



这个问题怎么解决(输出问题)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


这个问题怎么解决(输出问题)[已结贴,结贴人:joesandy]
发表于:2007-05-26 11:28:55 楼主
#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次.

为什么,,高手指点一下
发表于:2007-05-26 11:33:031楼 得分:0
输入:
11av
1个   1个   的输入看看呢?
发表于:2007-05-26 11:37:492楼 得分:0
输入1

出来的也是

数字:49     出现:1次.
发表于:2007-05-26 11:39:103楼 得分:0
还有我就是要输入一个字符串,然后输出结果
发表于:2007-05-26 11:48:264楼 得分:0
把1   当作字符输出了
发表于:2007-05-26 12:04:425楼 得分:10
注意你输入的是 "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的数字转换成了整型的数字


快速检索

最新资讯
热门点击