C 寻找重复字符并输出他们的位置
#include <stdio.h> #include <string.h> #include <stdlib.h> //给定字串 寻找重复字符 并记录下位置 //若字串是"0aabb" 则输出a:1 a:2 b:3 b:4 int isExist(char distinct[],char ch); int addToExist(char distinct[],char ch); int countTimes(char str[],int len,char ch); main() { char str[]="abcaaAB12ab12"; int i=0; char distinct[20]; for(; i<20; i++) { distinct[i]=0; } //addToExist(distinct,'a'); //printf("%c",distinct[0]);//ok int len=strlen(str); //printf("%d",isExist(distinct,str[0]));//ok for(i=0; i<len; i++) { int isEx=isExist(distinct,str[i]);//存在则是1 //遇到新字符 放入到distinct中去 //然后统计该字符出现次数 if(!isEx) { //printf("not %c",str[i]);//ok addToExist(distinct,str[i]); countTimes(str,len,str[i]); } else { //越过 } } } int isExist(char distinct[],char ch) { int i=0; int yes=0;//该字符是否已经存在 for(; i<20; i++) { if(distinct[i]==ch) { yes=1; break; } } return yes; } /** 新字符加入到最有一个有效字符之后 也就是放在第一个ASCII为0的位置 先前已经将distinct数组所有元素赋值为0 */ int addToExist(char distinct[],char ch) { int i=0; char st; while( (st=distinct[i])!=0 ) { i++; } distinct[i]=ch; return ++i; } /** 注意只有重复字符才输出他们的位置 */ int countTimes(char str[],int len,char ch) { int i=0; int countChar=0; for(; i<len; i++) { if(str[i]==ch) { //printf("%c:%d,",ch,i); countChar++; } } if(countChar>1) { for(i=0; i<len; i++) { if(str[i]==ch) { printf("%c:%d,",ch,i); } } } return countChar; }