計算機考研複試真題 字串排序
阿新 • • 發佈:2018-11-07
題目描述
編寫一個程式,將輸入字串中的字元按如下規則排序(一個測試用例可能包含多組資料,請注意處理)。
規則 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; }