POJ C程序设计进阶 编程题#2:字符串中次数第2多的字母

编程题#2:字符串中次数第2多的字母

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

输入一串长度不超过500个符号的字符串,输出在串中出现第2多的英语字母(大小写字母认为相同)和次数(如果串中有其它符号,则忽略不考虑)。如果有多个字母的次数都是第2多,则按串中字母出现的顺序输出第1个。

例 ab&dcAab&c9defgb

这里,a 和 b都出现3次,c和d都出现2次,e、f 和 g 各出现1次,其中的符号&和9均忽略不考虑。因此,出现第2多的应该是 c 和 d,但是 d 开始出现的位置在 c 的前面,因此,输出为

D+d:2

(假定在字符串中,次数第2多的字母总存在)

输入

一个字符串

输出

大写字母+小写字母:个数

样例输入

ab&dcAab&c9defgb

样例输出

D+d:2

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 
 5 struct charandnum {
 6     char ch;
 7     int count;
 8 };
 9 int main() {
10     struct charandnum s[501], max, second;
11     char a[501];
12     cin>>a;
13     int i, j, l = 0;
14     for (i = 0; a[i] != '\0'; i++) {
15         if ((a[i] >= 'A' && a[i] <= 'Z') || (a[i] >= 'a' && a[i] <= 'z')) {
16             char temp;
17             if (a[i] >= 'a')
18                 temp = a[i] - 32;
19             else
20                 temp = a[i];
21             bool found = false;
22             for (j = 0; j< l; j++) {
23                 if (s[j].ch == temp) {
24                     s[j].count++;
25                     found = true;
26                 }
27             }
28             if (!found) {
29                 s[l].ch = temp;
30                 s[l].count = 1;
31                 l++;
32             }
33         }
34     }
35     max = s[0];
36     bool foundSecond = false;
37     i = 0;
38     while (!foundSecond) {
39         if (s[i].count > max.count) {
40             second = max;
41             max = s[i];
42             foundSecond = true;
43         }
44         else if (s[i].count < max.count) {
45             second = s[i];
46             foundSecond = true;
47         }
48         i++;
49     }
50     for (i; i<l - 1; i++) {
51         if (s[i].count > max.count) {
52             second = max;
53             max = s[i];
54         } else if (s[i].count < max.count && s[i].count > second.count) {
55             second = s[i];
56         }
57     }
58     printf("%c+%c:%d\n", second.ch, (char)(second.ch + 32), second.count);
59     return 0;
60 }

 

posted @ 2015-08-14 23:21  dagon  阅读(1435)  评论(0编辑  收藏  举报