这个题得按照测试用例的字符串出现的字母顺序来输出
下面是我写的代码 我自我感觉挺棒的 如果有更好的 欢迎交流

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>

using namespace std;

vector<int> arr[128];
bool visited[128]; 

void Init(string str) {//将字符串所有字符统计一遍
    for(int i=0; i<str.size(); i++) {
        arr[str[i]].push_back(i);
    }
}

int main() {
    string str;
    while(cin>>str) {
        memset(arr,0,sizeof(arr));
        memset(visited,false,sizeof(visited));//初始化为没访问过
        Init(str);

        for(int i=0;i<str.size();i++){//遍历字符串 (为了按字符串出现顺序输出)
            if(!visited[str[i]]&&arr[str[i]].size()>1){//如果是没有访问过的字符 且 是重复的字符 
                for(int j=0;j<arr[str[i]].size();j++){
                    if(j==0){    //输出控制
                        printf("%c:%d",str[i],arr[str[i]][j]);
                    }else {
                        printf(",%c:%d",str[i],arr[str[i]][j]);
                    }
                }
                printf("\n");
                visited[str[i]]=true; //置访问过
            }
        }
    }
    return 0;
}