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

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

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

2019-11-10 17:22:49
字體:
來源:轉載
供稿:網友

題目描述

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

規則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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大新县| 桃园市| 红安县| 泽州县| 临漳县| 新兴县| 紫金县| 长沙市| 郯城县| 四川省| 岳阳市| 施甸县| 曲松县| 卓尼县| 涞水县| 宝清县| 依兰县| 当雄县| 元阳县| 安西县| 延川县| 塘沽区| 兖州市| 申扎县| 锡林郭勒盟| 隆回县| 玉屏| 西城区| 黄石市| 修水县| 仪陇县| 陆良县| 廉江市| 洛阳市| 徐州市| 津南区| 育儿| 柳林县| 乳山市| 德庆县| 宁南县|