华科机考:找位置

时间限制:1秒 空间限制:32768K

题目描述

对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

输入描述: 输入包括一个由字母和数字组成的字符串,其长度不超过100。

 

输出描述: 可能有多组测试数据,对于每组数据, 按照样例输出的格式将字符出现的位置标出。

1、下标从0开始。 2、相同的字母在一行表示出其出现过的位置。

输入例子: abcaaAB12ab12

 

输出例子: a:0,a:3,a:4,a:9

              b:1,b:10

              1:7,1:11

              2:8,2:12

思路:1.首先打个表(或者用map),记录一下每个字母出现的个数

         2.对出现字数超过2个的字母,再来找其出现的具体位置

        3.最后输出的顺序是按照字母出现的先后顺序来的(map会自动排序诶o(╯□╰)o)

代码:

#include <iostream>
#include <map>
using namespace std;

int main(){
    map<char,int> a;
    int flag;
    string str;
    while(cin>>str){
     for(int i=0;i<str.size();i++)
       a[str[i]]++;
     for(int i=0;i<str.size();i++){
       if(a[str[i]]>1){
          flag=0;
        for(int j=0;j<str.size();j++){
          if(str[i]==str[j]&&flag==0){
          cout<<str[i]<<':'<<j;
          flag=1;
          }
          else if(str[i]==str[j]&&flag==1){
          cout<<','<<str[i]<<':'<<j;
          }
        }
        a.erase(str[i]);//防止再次输出
        cout<<endl;
       }
     }
     a.clear();
    }
    return 0;
}

 

posted @ 2017-04-17 11:28  哦摩西罗伊  阅读(257)  评论(0)    收藏  举报