字母排序问题(c++实现)
2024-10-16 11:42:24
描述:编写一个程序,当输入不超过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 ;
}
最新文章
- udid替代方案
- Nutch2.x 演示抓取第一个网站
- 夺命雷公狗—angularjs—8—ng-class的简单用法
- 使用java访问 动态链接库(dll)
- ERP系统上传文档信息下载(十八)
- MFC 构建、消亡 顺序 (二)--多文档 (MDI)
- Git使用规范
- VMware10虚拟机安装mac os x 10.9
- LinkedHashMap:我还能实现LRU
- Spring-cloud(四)服务发现与消费:ribbon的使用
- 自定义控件详解(一):Paint类与Canvas类
- Kubernetes图形化归纳总结基础介绍整理
- day27 异常处理 和 网络协议
- JS 获取屏幕的宽度和高度,各种方式
- eclipse下查看java源码设置
- spring cloud学习(七)Spring Cloud Config(续)
- jdk8环境下,添加重复注解的美好体验
- Intellij idea的Dependencies波浪线
- [spring]xml配置文件中的";classpath:";与";classpath*:";的区别
- 判断IP地址是否在指定范围内的方法
热门文章
- 超微 X9DRL-iF 服务器主板简介 BIOS相关图解
- ubuntu 安装bochs
- [原]如何在Android用FFmpeg+SDL2.0解码声音
- XPS 15 9530使用Windows10频繁发生Intel HD Graphics 4600驱动奔溃的一种解决方法
- jQuery+Superfish制作下拉菜单
- Physical Based Shading in Unreal Engine 3
- iOS 7.1 安装 企业应用 提示 无法下载应用程序
- MySQL不能插入中文字符及中文字符乱码问题
- RTX发送消息提醒实现以及注意事项
- Android 定时器