zoukankan      html  css  js  c++  java
  • 字母排序问题(c++实现)

    描述:编写一个程序,当输入不超过60个字符组成的英文文字时,计算机将这个句子中的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度 相同。例如:

         输入:

        THE PRICE OFBREAD IS ¥1 25 PER POUND

        输出:

        ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU

     并且要求只对A到Z的字母重新排列,其它字符保持原来的状态。

    分析:难点在待排序列中混有不相干的字符,我用的是冒泡排序法,在大写字母间进行比较,用一个函数返回和最大值交换的字母的下标。

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 
     5 //返回第k位前的一个大写字母的下标
     6 int cal(string a, int k)
     7 {
     8     for (int i = k; i >= 0; i--)
     9     {
    10         if (a[i] >= 'A'&&a[i] <= 'Z')
    11             return i;
    12     }
    13     return -1;
    14 }
    15 void exchange(string& a, int x, int y)
    16 {
    17     char swap = a[x]; a[x] = a[y]; a[y] = swap;
    18 }
    19 int main()
    20 {
    21     string a;
    22     getline(cin, a);
    23     int n=0;//记录大写字母的个数
    24     for (int i = 0; i < a.size(); i++)
    25     {
    26         if (a[i] >= 'A'&&a[i] <= 'Z')
    27             n++;
    28     }
    29     int start;//排序的初始值
    30     for (int i = 0;; i++)
    31     {
    32         if (a[i] >= 'A'&&a[i] <= 'Z')
    33         {
    34             start = i; break;
    35         }
    36     }
    37     int swap = cal(a,a.size()-1);//要交换的字母下标
    38     for (int i = 0; i < n; i++)
    39     {
    40         int max = start;
    41         for (int i = 0; i <= swap; i++)
    42         {
    43             if (a[i] >= 'A'&&a[i] <= 'Z'&&a[i]>a[max])
    44                 max = i;
    45         }
    46         exchange(a, max, swap);
    47         swap = cal(a, swap - 1);
    48     }
    49     cout << a << endl;
    50     system("pause");
    51     return 0;
    52 }
  • 相关阅读:
    二进制位运算
    Leetcode 373. Find K Pairs with Smallest Sums
    priority_queue的用法
    Leetcode 110. Balanced Binary Tree
    Leetcode 104. Maximum Depth of Binary Tree
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 64. Minimum Path Sum
    Leetcode 63. Unique Paths II
    经典的递归练习
    案例:java中的基本排序
  • 原文地址:https://www.cnblogs.com/wuyoucao/p/4728616.html
Copyright © 2011-2022 走看看