题目描述
阿操最讨厌写字符串的题目,看到眼前密密麻麻的字母就烦。这件事的起因就是很久很久以前的一次找重复字符的位置。 现在有一个字符串,我们要找出其中的重复的字符并输出这些字符和字符的位置,如:aabcaabc22 输出 a,0;a,1;a,4;a,5,b,2;b,6,c,3;c,7;2,8;2,9
输入
输入一行字符串(字符串中只含数字和字母)。其长度不超过100。包括多组输入。
输出
根据样例的格式将重复出现的字符位置输出
样例输入 复制
aabcaabc22
样例输出 复制
a:0,a:1,a:4,a:5
b:2,b:6
c:3,c:7
2:8,2:9
题目思路:
输入字符串后,从头开始的字符并且没有被收录的字符寻找与之相同的字符并保存相同字符的下标到末尾。若不单有开始的一个字符则输出所有的下标。
完整代码:
#include<stdio.h>
main(){
char a[106]={0},c;
int n,num[50]={0},i,j,k;
while(scanf("%s",a)!=EOF){
i=0;
for(;a[i];i++){//字符串每个字符进行判断
if(a[i]!=1)//如果字符没有被改为1则是还没有归纳的字符
{c=a[i];a[i]=1;//a[i]变成1 a[i]字符被归纳
k=1;num[0]=i;//k表a[i]字符的个数,num数组把a[i]字符的下标收集
for(j=i+1;a[j];j++)//寻找更多的a[i]字符
{
if(a[j]==c){
num[k++]=j;
a[j]=1;
}
}
if(k>1){//k>1表示a[i]字符是重复的
for(j=0;j<k-1;j++)
printf("%c:%d,",c,num[j]);
printf("%c:%d",c,num[k-1]);
printf("\n");
}
}
}
}
}