• 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] != ''; 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
    ", second.ch, (char)(second.ch + 32), second.count);
    59     return 0;
    60 }
  • 相关阅读:
    Nginx的编译,和简单的配置问题
    项目课DNS主域名解析服务器(四)
    项目课DHCP服务(三)
    项目课PXE自动装机(二)
    Nginx 详细讲解
    ansible批量管理工具的搭建与简单的操作
    SUID,SGID,SBIT这些到底是什么
    密码截取
    分治和递归的算法实现求数组A[n]中的前k个最大数
    回溯法实现求1n个自然数中r个数的组合
  • 原文地址:https://www.cnblogs.com/dagon/p/4731484.html
Copyright © 2020-2023  润新知