您的位置:首页 > 其它

华为OJ字符串排序

2017-04-01 15:29 141 查看
描述
编写一个程序,将输入字符串中的字符按如下规则排序。规则1:英文字母从A到Z排列,不区分大小写。      如,输入:Type 输出:epTy规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。    如,输入:BabA 输出:aABb规则3:非英文字母的其它字符保持原来的位置。    如,输入:By?e 输出:Be?y样例:    输入:   A Famous Saying: Much Ado About Nothing(2012/8).    输出:   A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

知识点字符串,排序
运行时间限制10M
内存限制128
输入
输出
样例输入A Famous Saying: Much Ado About Nothing (2012/8).
样例输出A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void SplitAlpha(string src, string &dst)
{
for (int i = 0; i < src.length(); i++)
{
if (isalpha(src[i]))
{
dst.push_back(src[i]);
}
}
}

void Sort(string &str)
{
for (int i = 1; i < str.length(); i++)
{
char tmp = str[i];
int j = i - 1;
for (j; j >= 0; j--)
{
if (toupper(tmp) < toupper(str[j]))
{
str[j + 1] = str[j];
}
else
break;
}

str[j + 1] = tmp;
}
}

int main()
{
string src, dst;
getline(cin, src);

SplitAlpha(src, dst);
Sort(dst);

int i = 0, j = 0;
for (i, j; i < src.length() && j < dst.length(); i++)
{
if (isalpha(src[i]))
{
src[i] = dst[j];
j++;
}
}
cout << src;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: