/* 时间:2014.1.31 目的:题目1199:找位置 http://ac.jobdu.com/problem.php?pid=1199 */ #include <stdio.h> #include <string.h> int main() { char str[101]; int flag[101], i, j, k, f; while(gets(str)) { memset(flag,0,sizeof(int)*101); for(i = 0;str[i];i++) { f = 0; if(flag[i] == 1)//如果已经标记访问过就跳过 continue; for(j = i + 1;str[j];j++)//访问指针i后的字符是否与i的字符有相同的,如果相同则输出 { if(str[j] == str[i]) { if(f == 0)//f用来输出第一个i位置的字符 ,也表示有多个相同字符,换行时需要用 { printf("%c:%d",str[i],i); f = 1;//控制以后不用再输出i位置的字符 } printf(",%c:%d",str[j],j); flag[j] = 1; } if(f == 1 && j == (strlen(str) - 1))//只有当有多个字符 ,且访问到最后一个字符时就换行 printf("\n"); } } } return 0; } /* ------------------ abcaaAB12ab12 思路:1. 利用两个工作指针i,j,i用来指着当前位置,j用来循环i后的字符 a:0,a:3,a:4,a:9 2. b:1,b:10 1:7,1:11 2:8,2:12 ------------------ */
原文:http://blog.csdn.net/z_x_b5/article/details/18887691