专栏首页青青天空树字母排序问题(c++实现)

字母排序问题(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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2016-数据的交换输出

    输入:输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。

    用户2038589
  • 挖掘机技术哪家强(c++实现)

    描述:为了用事实说明挖掘机技术到底哪家强,组织一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

    用户2038589
  • 2015-偶数求和

    有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程...

    用户2038589
  • 1084 外观数列 (20 分)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    韩旭051
  • 【USACO 3.2】Magic Squares

    4*2个格子分别为 1234 8765 的魔板有3种操作,A:上下两排互换,B:最后一列放到第一列前面,C:中间四个顺时针旋转1格。 现在给出目标状态,...

    饶文津
  • 弱校联盟10.3

    n对括号最多需要1+2+..+n次交换,当它是)))..(((的形式时,)))(((需要6次,然后把中间两个交换一下,))()((就还需要5次,再交换一次靠近左...

    饶文津
  • 颜色聚合向量

    package com.imageretrieval.features; /** * 颜色聚合向量<br> * 参考链接:http://www.docin...

    Venyo
  • LeetCode31|打印从1到最大的n位数

    这道题算是api的使用方式了,数据的计算,其实自己也没有什么好说的了,但是由于文章的字数必需要达到300字,所有有些时候就只好在这里唠会嗑了,因为文章的原创对于...

    后端Coder
  • 【HDU 5839】Special Tetrahedron(计算几何)

    共面判断就是用叉乘计算出ijk三点所在面的法向量,然后判断il向量是否和法向量垂直,是则共面。

    饶文津
  • 1506 传话

    1506 传话 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 一个朋友网...

    attack

扫码关注云+社区

领取腾讯云代金券