题解 | 找位置
#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进行减一