c++-字符串排序-冒泡排序

题目描述

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

规则 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).


输入描述:

输出描述:

示例1

输入

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

输出

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
冒泡排序即可:

#include <iostream>
#include <cmath>
#include <string.h>
#include <stdio.h>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::swap;

int changeA_2_a(char c){
	if(c>='A'&&c<='Z')
		c+=32;
	return c;
}

int is_letter(char c){
	if(c>='a'&&c<='z')
		return 1;
	else if(c>='A'&&c<='Z')
		return 1;
	else
		return 0;
}

void solution(char *res){
    int len=strlen(res);
    int j2;

    for(int i=0;i<len;i++) {
    	for(int j=len-1;j>=i;j--){
    		if(!is_letter(res[j])){
    			continue;
    		}
    		j2=j-1;
    		while(!is_letter(res[j2])){
    			j2--;
    			if(j2<i)
    				break;
    		}
    		if (changeA_2_a(res[j])<changeA_2_a(res[j2]) && j2>=i)
    			swap(res[j],res[j2]);

    	}
    }
    
}

int main()
{
    char res[1000];
    while(cin>>res){
    	solution(res);
        cout<<res<<endl;
    }
    return 0;
}





posted on 2017-12-14 21:44  sichenzhao  阅读(855)  评论(0编辑  收藏  举报

导航