字符串排序

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则1:英文字母从AZ排列,不区分大小写。

      如,输入:Type 输出:epTy

规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。

    如,输入:BabA 输出:aABb

规则3:非英文字母的其它字符保持原来的位置。

    如,输入:By?e 输出:Be?y

样例:

    输入:

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

    输出:

   A aaAAbc dFgghhiimM nNn oooos Sttuuuy (2012/8).



输入描述:



输出描述:


输入例子:
A Famous Saying: Much Ado About Nothing (2012/8).

输出例子:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

Code:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

bool compare(char c1, char c2){
	if (c1>='a' && c1<='z')
		c1 -= 32;
	if (c2>='a' && c2<='z')
		c2 -= 32;
	return c1<c2;
}

int main(){
	string str;
    vector<char> temp;
	while (getline(cin, str)){	
        temp.clear();
		for (int i = 0; i<str.size(); i++){
			if ((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z'))
				temp.push_back(str[i]);
		}
		stable_sort(temp.begin(),temp.end(),compare);
		for (int i = 0,k=0; (i<str.size())&&(k<temp.size()); i++){
			if ((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z'))
				str[i] = temp[k++];
		}
		cout << str << endl;
	}
    return 0;
}


你可能感兴趣的:(华为在线编程训练)