/*
题目描述:
对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12
输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。
输入:
输入包括一个由字母和数字组成的字符串,其长度不超过100。
输出:
可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。
样例输入:
abcaaAB12ab12
样例输出:
a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12
提示:
1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。
思路:
1、主要根据不同字符的ASCII码不同,来存储不同的字符;
2、然后统计字符出现的次数
*/
# include <stdio.h>
# include <string.h>
struct repeat
{
char c;
int loc[10];
int count;
int flag;
};
int main(void)
{
char s[100];
repeat re[200];
while(scanf("%s", s) != EOF)
{
getchar(); //吸收回车符。
int i,j,index,len = strlen(s);
//初始化
for(i = 0; i < 100; i++)
{
re[i].count = 0;
re[i].flag = 0;
}
//统计字符个数,字符位置
for(i = 0; i < len; i++)
{
re[s[i]].c = s[i];
index = re[s[i]].count;
re[s[i]].loc[index] = i;
re[s[i]].count++;
}
for(i = 0; i < len; i++)
{
index = s[i];
//printf("-----%d", index);
if(re[index].count > 1 && re[index].flag == 0)
{
//输出重复字符
for(j = 0; j < re[index].count-1; j++)
{
printf("%c:%d,", re[index].c, re[index].loc[j]);
}
printf("%c:%d\n", re[index].c, re[index].loc[j]);
//标记已读
re[index].flag = 1;
}
}
}
return 0;
}
1199 找位置
最新推荐文章于 2018-03-06 21:05:30 发布