1. 程式人生 > >計算機考研複試真題 字串排序

計算機考研複試真題 字串排序

題目描述

編寫一個程式,將輸入字串中的字元按如下規則排序(一個測試用例可能包含多組資料,請注意處理)。

規則 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).


/*
解題思路:常見考法,將每個元素包含兩個資訊。可以將每個字元設定一個字元位和一個標誌位,將輸入的字串存取到向量中,
        存的過程中如果字元是字母則字元位不填充,留著輸出時填充,並置標誌位為0;如果字元不是字母則字元位填充,並置標誌位為1。
        排序是用2個for迴圈,外層for迴圈按字母順序排序,內層for迴圈按輸出順序排序。再向結果向量中填充時,若標誌位為1則不填充,
        下標直接往後移。若標誌位為0則填充,然後下標往後移。最後輸出即可。
*/ #include<iostream> #include<string> #include<vector> using namespace std; class Node{ //每個元素包含的資訊 public: char ch; //字元位 int flag; //標誌位 }; int main(){ vector<Node>result(1024); //存放字元 string str; while(getline(cin,str)){ //getline(cin,str)是為了讀入一行 int len=str.size(); for(int i=0;i<len;++i){ if( (str[i]<='z'&&str[i]>='a') || (str[i]<='Z'&&str[i]>='A') ) //如果是字母 result[i].flag=0; else{ result[i].flag=1; result[i].ch=str[i]; } } int index=0; for(int i='A';i<='Z';++i) for(int j=0;j<len;++j){ if(str[j]==i||str[j]==i+32){ while(result[index].flag==1) //如果不是字母 ++index; result[index].ch=str[j]; result[index].flag=1; } } for(int i=0;i<len;++i) cout<<result[i].ch; cout<<endl; } return 0; }