码迷,mamicode.com
首页 > 其他好文 > 详细

找位置

时间:2018-02-12 21:00:50      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:math   分享   输出   思路   set   遍历   can   设置   string   

题目截图:

技术分享图片

 

思路:

  令 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 }

 

找位置

标签:math   分享   输出   思路   set   遍历   can   设置   string   

原文地址:https://www.cnblogs.com/coderJiebao/p/HustTest25.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!