#include <bits/stdc++.h> // 导入标准库的所有头文件 using namespace std; // 定义一个结构体 `point`,用来存储字符的相关信息 struct point { int num; // 记录字符在字符串中出现的次数 vector<int> AA; // 记录字符在字符串中出现的位置(索引) bool flag = false; // 用来判断是不是该字符第一次被输出 }; int main() { string s; // 用来存储输入的字符串 map<char, point> mapp; // 定义一个映射,用来存储每个字符及其对应的 `point` 结构体 while (cin >> s) { // 逐行读取输入的字符串 // 第一次遍历字符串,统计每个字符的出现次数 for (int i = 0; i < s.size(); i++) { mapp[s[i]].num++; } // 第二次遍历字符串,记录每个字符的出现位置(如果出现次数大于1) for (int i = 0; i < s.size(); i++) { if (mapp[s[i]].num > 1) { mapp[s[i]].AA.push_back(i); } } // 第三次遍历字符串,输出每个出现次数大于1且还未被输出的字符及其出现的位置 for (int i = 0; i < s.size(); i++) { if (mapp[s[i]].num > 1 && mapp[s[i]].flag == false) { for (int j = 0; j < mapp[s[i]].AA.size(); j++) { if (j == 0) printf("%c:%d", s[i], mapp[s[i]].AA[j]); else printf(",%c:%d", s[i], mapp[s[i]].AA[j]); } cout << endl; mapp[s[i]].flag = true; // 标记该字符已被输出 } } } return 0; }