找位置
题目截图:
思路:
令asc[i][j]表示第 j个ascii码为 i的字符在字符串中的位置,其中 asc[i][0]存储 ascii码为 i的字符在字符串中的个数。另外,由于要根据输入前后决定输出字符位置,需要设置 c[]来存储字符第一次出现时的位置前后。最后,将个数大于 1的字符按要求输出即可。
代码如下:
1 /* 2 找位置 3 */ 4 5 #include <stdio.h> 6 #include <string.h> 7 #include <math.h> 8 #include <stdlib.h> 9 #include <time.h> 10 11 char str[101]; // 存储输入字符 12 char c[101]; // 存储字符第一次出现前后 13 int asc[256][101]; // asc[i][j] 表示第 j 个 ascii 码为 i 的字符在字符串中的位置 14 15 int main() { 16 while(scanf("%s", str) != EOF) { 17 memset(asc, 0, sizeof(asc)); // 初始化 asc 数组 18 int i, j, k=0; 19 for(i=0; i<strlen(str); ++i) { // 遍历字符串的每个字符 20 if(asc[str[i]-'\0'][0]==0) { // 字符第一次出现 21 c[k++] = str[i]; 22 } 23 asc[str[i]-'\0'][0]++; // 字符出现次数 +1 24 // 记录字符位置 25 asc[str[i]-'\0'][asc[str[i]-'\0'][0]]=i; 26 } 27 for(i=0; i<k; ++i) { // 遍历每个不同字符 28 int ascii = c[i]-'\0'; // 求字符 ASCII 码 29 if(asc[ascii][0] > 1) { // 若有重复 30 // 按格式输出 31 for(j=1; j<=asc[ascii][0]; ++j) { 32 printf("%c:%d", c[i], asc[ascii][j]); 33 if(j < asc[ascii][0]) { 34 printf(","); 35 } 36 } 37 printf("\n"); 38 } 39 } 40 } 41 42 return 0; 43 }