思路:
先找到每个字符出现的次数——>出现次数大于1时用单独的函数查找其出现的位置
1、定义一个128大小的int型数组,将字符串的每一个字符的ASC码作为下标,统计每个字符出现的次数,每出现一次对应数组元素大小加一,
2、统计完成后,再遍历原字符串,将每个字符的ASC码作为下标查看该下标对应的数组元素值是否大于1,如果大于就直接输出(定义了一个专门用来输出的函数),
3、输出完成之后将其元素值修改为0,防止遍历到后面相同的字符时又重复输出
注:增加了一个flag标志位专门用来控制逗号的输出
#include <iostream> #include <string> using namespace std; const int MAX = 128; //单独定义一个函数,查找该元素在字符串中出现的位置,并打印 void search(char x, string str) { int flag = 0; for (int i = 0; i < str.size(); i++) { if (x == str[i]) { if (flag) cout << ','; cout << x << ':' << i; flag = 1; } } } int main() { int list[MAX] = {0}; string str; while (cin >> str) { //统计每个字符出现的次数 for (int i = 0; i < str.size(); i++) { list[(int)str[i]]++; } for (int i = 0; i < str.size(); i++) { //当出现次数大于1时才去打印 if (list[(int)str[i]] > 1) { search(str[i], str); cout << endl; list[(int)str[i]] = 0; } } } return 0; }