字母排序問題(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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM