#include <iostream>
using namespace std;
/**
* 定义的辅助结构体
*/
struct map {
char name = '\0';
int num = 0;
};
/**
* 找到map数组中是否有对应关键字,若有,则+1,若无,则添加一个对应关键字,再+1
* 模拟map的功能
* @param m map数组
* @param name 关键字
*/
void findAndAdd(map m[], char name) {
int i = 0;
while (m[i].name != '\0') {
if (m[i].name == name) {
m[i].num++;
return;
} else {
i++;
}
}
m[i].name = name;
m[i].num++;
}
int main() {
char arr[100];
map temp[100];
while (cin >> arr) {
int i = 0;
//初试化temp数组
while (arr[i] != '\0') {
findAndAdd(temp, arr[i]);
i++;
}
i = 0;
//把只出现一次的字符的num变为0,为后面打印做准备
while (temp[i].name != '\0') {
if (temp[i].num == 1) {
temp[i].num = 0;
}
i++;
}
i = 0;
//循环遍历temp数组
while (temp[i].name != '\0') {
int j = 0;
//循环遍历arr数组(即字符串)
while (arr[j] != '\0') {
if (temp[i].num != 0 && arr[j] == temp[i].name) { //若num=0且匹配字符串,则打印
cout << temp[i].name << ":" << j;
temp[i].num--;//为打印逗号做准备
if (temp[i].num != 0) {
cout << ",";
} else {
cout << endl;
}
}
j++;
}
i++;
}
}
}
代码能力有限,存在很多问题,请批评指正!

京公网安备 11010502036488号