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



京公网安备 11010502036488号