#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
char str[200] = { 0 }; // 字符串
//记录每个字符的位置 一对多
// !!! 相同字符,可以按照先后顺序往 动态数组 存入位置,即一个字符,对应多个位置
// 如 字符a 动态数组中 2 表示位置为2
map<char, vector<int>> timesMap;
vector<char> charSeq; // 记录每个字符出现的先后顺序
cin >> str;
// 字符串结束符 '\0'
for (int i = 0; str[i] != '\0'; i++) {
//timesMap[str[i]]得到value,即vector<int>数组
timesMap[str[i]].push_back(
i); // 把某个字符的位置记录到动态数组中
// 如果是第一次出现
if (timesMap[str[i]].size() == 1) {
charSeq.push_back(str[i]); // 记录输入的先后顺序(不会有重复)
}
}
// 按先后打印重复字符timesMap[str[i]].size()>=2
vector<char>::iterator seqIt;
for (seqIt = charSeq.begin(); seqIt != charSeq.end(); seqIt++) {
if (timesMap[*seqIt].size() >= 2) {
vector<int>::iterator it;
it = timesMap[*seqIt].begin();
cout << *seqIt << ":" << *it; // 为了格式单独打印
// 单独打印了一个,下面加1开始
for (it = timesMap[*seqIt].begin() + 1; it != timesMap[*seqIt].end(); it++) {
cout << "," << *seqIt << ":" << *it;
}
cout << endl; // 重复才打印
}
}
return 0;
}