前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字母排序问题(c++实现)

字母排序问题(c++实现)

作者头像
用户2038589
发布2018-09-06 11:34:22
2.1K0
发布2018-09-06 11:34:22
举报
文章被收录于专栏:青青天空树青青天空树

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

     输入:

    THE PRICE OFBREAD IS ¥1 25 PER POUND

    输出:

    ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU

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

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

代码语言:javascript
复制
 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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档