链接想好几个难点
1 输入了几个字符=>写个循环得出
2 怎么防止重复访问=>用变量visit记录,在输出的时候改变visit链接
3 怎么找相同的=>用两个循环(暴力匹配)
4 输出格式=>
第一行:单独输出
第二行到n行,之前加个‘,’
最后一行加‘\n’怎么办 =>用变量记录最后一个同类的下标,不是0,就输出换行
//
// Created by Administrator on 2023/3/8.
//
#include <cstdio>
struct keyLine{
char key;
int visit = 0;//未被同类访问
int seq;//记录下标
};
int main(){
char arr[100] = {0};
while (scanf("%s", arr) != EOF){
int n = 0;//记录字符个数
for(int i = 0; i < 100; ++i){//算几个字符
if(arr[i] != '\0'){
++n;
}else{
break;
}
}
keyLine data[n];
for (int i = 0; i < n; ++i) {//存好结构体
data[i].key = arr[i];
data[i].seq = i;
}
for(int i = 0; i < n; ++i){
int out = 0;//记录最后一个序号,如果不为0,那就说明输出了,打个\n
for(int j = i; j < n; ++j){
if(data[i].key == data[j].key && i != j){
if(data[i].visit != 1){//输出第一个
printf("%c:%d", data[i].key, data[i].seq);
data[i].visit = 1;//输出了就把遍历置1
}
if(data[j].visit != 1){//输出跟第一个一样的字符
printf(",%c:%d", data[j].key, data[j].seq);
out = j;
data[j].visit = 1;
}
}
}
data[i].visit = 1;//不管怎样都要把遍历置1
if(out != 0){
printf("\n");
}
}
}
return 0;
}

京公网安备 11010502036488号