思路:
先找到每个字符出现的次数——>出现次数大于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;
}