[编程题]字符串排序

来源:互联网 发布:淘宝上卖的dnf号可靠吗 编辑:程序博客网 时间:2024/06/06 18:59

Talk is cheap, show me the code.

一、问题描述

编写一个程序,将输入字符串中的字符按如下规则排序。
规则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).

输入例子:

A Famous Saying: Much Ado About Nothing (2012/8).

输出例子:

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

二、问题分析

首先是对所有大小写字母按照原来的顺序进行排序,然后把排序后的字符都替换原来的字符串的大小写字母即可。排序的核心是选择排序。

#include <iostream>#include <string>#include <cctype>using namespace std;string stableSort(string str){    string s;    char up = 'A', low = 'a';    while (up <= 'Z')    {        for (int i = 0; i < str.size(); i++)        {            if (str[i] == up || str[i] == low)            {                s += str[i];            }        }        up++;        low++;    }    return s;}int main(){    string line;    while (getline(cin, line))    {        string str;        for (int i = 0; i < line.size(); i++)        {            if (isalpha(line[i]))            {                str += line[i];            }        }        string s = stableSort(str);        int j = 0;        for (int i = 0; i < line.size(); i++)        {            if (isalpha(line[i]))            {                line[i] = s[j];                j++;            }        }        cout << line << endl;    }    return 0;}
1 0
原创粉丝点击