国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

華為機試在線訓練-牛客網(16)字符串排序

2019-11-10 19:37:03
字體:
來源:轉載
供稿:網友

題目描述

編寫一個程序,將輸入字符串中的字符按如下規則排序。

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

這是一道純字符處理問題,難點在大小寫不區分排序,默認的ASCII碼排序是區分大小寫的,而且相差32,直接排序會使所有小寫字母都排在后面。

而此題要保證:

(1)小寫字母和大寫字母不區分,而且保持原來輸入順序!

(2)非英文字母保持原樣輸出

關鍵問題在于如何保證大小寫字母不區分且保持原來順序,目前能想到的辦法是從a到z依次去string中找,找到一個字母就添加進來:

        for(int i=0;i<26;i++){            for(auto c:str_sort){//str_sort為待排字符串                if(c=='a'+i||c=='A'+i)                    str_temp+=c;//str_temp為排序后的字符串,字母大小寫不區分且保持原序            }        }對于第二個問題,可以拷貝一份string副本,非字母字符保持不變,字母字符以'0'替換,將經過上述方法排序過的string替換掉該副本的所有'0'字符即可。

完整AC后的代碼:

#include <iostream>#include <string>using namespace std;int main(){    string inStr;    while(getline(cin,inStr)){        string str_temp,str_sort,str_res;        str_res=inStr;        for(auto &e:str_res){            if((e>='a'&&e<='z')||(e>='A'&&e<='Z')){                str_sort+=e;                e='0';            }        }        for(int i=0;i<26;i++){            for(auto c:str_sort){                if(c=='a'+i||c=='A'+i)                    str_temp+=c;            }        }        int i=0;        for(auto &e:str_res){            if(e=='0'){               e=str_temp[i];               i++;            }        }        cout<<str_res<<endl;;    }    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临海市| 古浪县| 威信县| 芜湖市| 徐水县| 芒康县| 丰台区| 封开县| 咸阳市| 阿鲁科尔沁旗| 怀安县| 永城市| 嵩明县| 正定县| 兴城市| 新建县| 永德县| 福安市| 海晏县| 松桃| 河池市| 报价| 乐都县| 合作市| 根河市| 道孚县| 云南省| 昌平区| 富蕴县| 庄河市| 玉门市| 金寨县| 枣阳市| 吉木乃县| 肥东县| 紫阳县| 桐柏县| 安庆市| 顺义区| 靖州| 徐水县|