用C++编写一个程序实现删除字符串中重复的字符,并分别统计,重复的字符个数。

如题所述

//之前写的
//测试通过,如果有疑问,欢迎交流
//思路:用map保存每个字符出现的次数
#include<iostream>
#include<map>
using namespace std;
 
int main(){
    char str[100];
    gets(str);
    int cur_idx = 0;
    int cur_next = 0;
    map<char, int> char_counts;
    while(str[cur_idx] != '\0'){
            //判断当前字符,是否出现过
        if(char_counts.count(str[cur_idx]) == 0){
            char_counts[str[cur_idx]] = 1;
            str[cur_next] = str[cur_idx];
            cur_next++;
            cur_idx++;
        }else{
            char_counts[str[cur_idx]]++;
            cur_idx++;
        }
    }
    str[cur_next] = '\0';
    puts(str);
    map<char, int>::iterator cur_it = char_counts.begin();
    for(;cur_it!=char_counts.end();cur_it++){
        cout<<cur_it->first<<":"<<cur_it->second<<endl;
    }
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-31
#include <stdio.h>
#include <vector>

const char defStr[] = "aabbccadfadfdaefdcadfasdfeadfadfaadfadf";


int main( int argc,char ** argv)
{
    std::vector<bool> bExit(128,false);
    std::vector<char> last(128,0);
    
    std::vector<char> vectorStr(defStr,defStr+sizeof(defStr));
     int curIndex = 0;

    vector<char>::iterator iter;

    for (iter=vectorStr.begin();iter!=vectorStr.end();iter++)  
    {  
        if( bExit[*iter] != true )
        {
            last[curIndex] = *iter;
            bExit[*iter] = true;
            ++curIndex;
        }
    } 
    last[curIndex]='\0';
        
    for( iter = last.begin();iter != last.end(); iter++ )
    {
        printf("%c",*iter);
    }

    return 0;
}

没有详细验证过,参考:http://www.iu8s.com/forum.php?mod=viewthread&tid=8&extra=,欢迎留言讨论。