1571 - 找位置
对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12<br />
输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。
<br />
Input
输入包括一个由字母和数字组成的字符串,其长度不超过100。
<br />
Output
可能有多组测试数据,对于每组数据,<br />
按照样例输出的格式将字符出现的位置标出。
<br />
Examples
Input
1h6trhntsr1hbtrstrshtrdj AA
Output
1:0,1:10 h:1,h:5,h:11,h:19 t:3,t:7,t:13,t:16,t:20 r:4,r:9,r:14,r:17,r:21 s:8,s:15,s:18 A:0,A:1
Hint
1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。
Solution C
int main(int argc, char* argv[]) {char st[101],s,i,j,k; int visit[101]; while(gets(st)) { for(i=0;i<101;i++) visit[i]=0; for(i=0;st[i]!='\0';i++) { k=0; if(visit[i]==0){ s=st[i];k=1; for(j=i+1;st[j]!='\0';j++) {if(st[j]==s) { if(k==1){printf("%c:%d",s,i);k=2;} printf(",%c:%d",st[j],j);visit[j]=1; } } if(k==2)puts(""); } } } return 0; }
Solution C++
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char s[101]; int visit[101]= {0}; int i,j,len,flag; while((scanf("%s",s))!=EOF) { len = strlen(s);//len字符串的长度 for(i=0; i<101; i++) { visit[i]=0;//初始化 } for(i=0; i<len; i++) { if(visit[i]==0)//没有访问过 { flag=0;//flag=1表示后面还有该字符并且不是第一个遇到 for(j=i+1; j<len; j++)//遍历后面的字符 { if(s[i]==s[j]) { if(flag==1) { printf(",%c:%d",s[j],j); visit[j]=1; } else { printf("%c:%d,%c:%d",s[i],i,s[j],j);//遇到后面第一个相同字符 visit[i]=1; visit[j]=1; flag=1; } } } if(flag==1) printf("\n");//有重复字符的才要打印,没有的不打印 } } } return 0; }
Hint
1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。