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

输入:

THE PRICE OFBREAD IS ¥1 25 PER POUND

输出:

ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU

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

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

 #include<iostream>
#include<string>
using namespace std; //返回第k位前的一个大写字母的下标
int cal(string a, int k)
{
for (int i = k; i >= ; i--)
{
if (a[i] >= 'A'&&a[i] <= 'Z')
return i;
}
return -;
}
void exchange(string& a, int x, int y)
{
char swap = a[x]; a[x] = a[y]; a[y] = swap;
}
int main()
{
string a;
getline(cin, a);
int n=;//记录大写字母的个数
for (int i = ; i < a.size(); i++)
{
if (a[i] >= 'A'&&a[i] <= 'Z')
n++;
}
int start;//排序的初始值
for (int i = ;; i++)
{
if (a[i] >= 'A'&&a[i] <= 'Z')
{
start = i; break;
}
}
int swap = cal(a,a.size()-);//要交换的字母下标
for (int i = ; i < n; i++)
{
int max = start;
for (int i = ; i <= swap; i++)
{
if (a[i] >= 'A'&&a[i] <= 'Z'&&a[i]>a[max])
max = i;
}
exchange(a, max, swap);
swap = cal(a, swap - );
}
cout << a << endl;
system("pause");
return ;
}

最新文章

  1. udid替代方案
  2. Nutch2.x 演示抓取第一个网站
  3. 夺命雷公狗—angularjs—8—ng-class的简单用法
  4. 使用java访问 动态链接库(dll)
  5. ERP系统上传文档信息下载(十八)
  6. MFC 构建、消亡 顺序 (二)--多文档 (MDI)
  7. Git使用规范
  8. VMware10虚拟机安装mac os x 10.9
  9. LinkedHashMap:我还能实现LRU
  10. Spring-cloud(四)服务发现与消费:ribbon的使用
  11. 自定义控件详解(一):Paint类与Canvas类
  12. Kubernetes图形化归纳总结基础介绍整理
  13. day27 异常处理 和 网络协议
  14. JS 获取屏幕的宽度和高度,各种方式
  15. eclipse下查看java源码设置
  16. spring cloud学习(七)Spring Cloud Config(续)
  17. jdk8环境下,添加重复注解的美好体验
  18. Intellij idea的Dependencies波浪线
  19. [spring]xml配置文件中的&quot;classpath:&quot;与&quot;classpath*:&quot;的区别
  20. 判断IP地址是否在指定范围内的方法

热门文章

  1. 超微 X9DRL-iF 服务器主板简介 BIOS相关图解
  2. ubuntu 安装bochs
  3. [原]如何在Android用FFmpeg+SDL2.0解码声音
  4. XPS 15 9530使用Windows10频繁发生Intel HD Graphics 4600驱动奔溃的一种解决方法
  5. jQuery+Superfish制作下拉菜单
  6. Physical Based Shading in Unreal Engine 3
  7. iOS 7.1 安装 企业应用 提示 无法下载应用程序
  8. MySQL不能插入中文字符及中文字符乱码问题
  9. RTX发送消息提醒实现以及注意事项
  10. Android 定时器