|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
输入包括一个由字母和数字组成的字符串,其长度不超过100。下标从0开始输出,相同的字母在一行表示出其出现过的位置。
示例:
输入:
输出:
- a:0,a:3,a:4,a:9
- b:1,b:10
- 1:7,1:11
- 2:8,2:12
复制代码
顺序查找的思路,每个元素遍历一遍数组。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main()
- {
- char str[100];
- while(~scanf("%s", str))
- {
- int len = strlen(str);
- for(int i = 0; i < len; i++)
- { //每过一趟都将该字符以及与该字符相同的字符置为'*'
- int count[100] = {0};//与当前字符相同的置1
- int flag = 0; //记录是否有重复字符,若有置1
- char ch = str[i];
- for(int j = i+1; j < len; j++)
- {
- if(str[j] == ch)
- {
- count[j] = 1;
- count[i] = 1;
- }//有相同的字符,将ch和该字符的标记都置为1
- }//一趟结束,输出
- int is_first = 1; //第一个输出的前面不打逗号,接下来的都在输出前加逗号
- for(int k = 0; k < len; k++)
- {
- if((count[k] == 1) && is_first && str[k] != '*')
- {
- printf("%c:%d", str[k], k);
- str[k] = '*';
- is_first = 0;
- continue;
- }
- else if((count[k] == 1) && (is_first == 0) && str[k] != '*')
- {
- printf(",%c:%d", str[k], k);
- str[k] = '*';
- continue;
- }
- }
- if(is_first == 0)
- printf("\n");
- }
- }
- }
复制代码 写完之后我才发现count数组没有任何作用,用is_first就可以判断是否有重复元素了。
|
|