题解 | 找位置
#include <bits/stdc++.h>
using namespace std;
typedef struct cop{
char a;
int count;
}cp;
int find(cp arr[],int n,char b){
for(int i=0;i<n;i++){
if(arr[i].a==b){
return i;
break;
}
}
return -1;
}
int main(){
string s;
cin>>s;
cp arr[s.size()];
int n=0;
for(char c:s){
if(find(arr,n,c)!=-1){
arr[find(arr,n,c)].count++;
}
else{
arr[n].a=c;
arr[n].count=1;
n++;
}
}
for(int i=0;i<n;i++){
if(arr[i].count!=1){
for(int j=0;j<s.size();j++){
if(s[j]==arr[i].a){
arr[i].count--;
if(arr[i].count!=0){
printf("%c:%d,",s[j],j);
}else{
printf("%c:%d",s[j],j);
}
}
}
printf("\n");
}
}
}
本题的难度在于格式化输出,根据要求,我们需要找出来出现次数大于1的所有字母,按照出现顺序依次输出其出现的位置,这样的话,只需要把这些内容存起来,用一个结构体存内容和数量,然后遍历即可,最后在输出的时候,由于尾部不同,所以需要在输出的时候对count进行减一