链接想好几个难点
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; }