標籤:style blog color 問題 表 name
將一個字串的母音字母複製到另一個字串,並排序(30分)
問題描述:有一字串,裡面可能包含英文字母(大寫、小寫)、數字、特殊字元,現在需要實現一函數,
將此字串中的母音字母挑選出來,存入另一個字串中,並對字串中的字母進行從小到大的排序
(小寫母音字母在前,大寫的母音字母在後,依次有序)。
說明:1、 母音字母是a,e,i,o,u,A,E,I,O,U。
2、 篩選出來的母音字母,不需要剔重;最終輸出的字串,小寫母音字母排在前面,大寫母音字母排在後面,依次有序。
要求實現函數:void sortVowel (char* input, char* output);
【輸入】 char* input,表示輸入的字串
【輸出】 char* output,排好序之後的母音字串。
【返回】 無樣本
輸入:char *input = “Abort!May Be Some Errors In Out System. “輸出:char *output =“aeeeooouAEIO “
#include<map>#include<string>using namespace std;void sortVowel (char* input, char* output){ map<char,int> ao,AO; unsigned j=0; for(unsigned i=0;i<strlen(input);i++) { if(input[i]==‘a‘||input[i]==‘o‘||input[i]==‘e‘||input[i]==‘i‘||input[i]==‘u‘) ao[input[i]]++; if(input[i]==‘A‘||input[i]==‘O‘||input[i]==‘E‘||input[i]==‘I‘||input[i]==‘U‘) AO[input[i]]++; } for(map<char,int>::iterator iter=ao.begin();iter!=ao.end();iter++) { int l = iter->second; while(l) { output[j++]=iter->first; l--; } } for(map<char,int>::iterator iter1=AO.begin();iter1!=AO.end();iter1++) { int l0 = iter1->second; while(l0) { output[j++]=iter1->first; l0--; } } output[j]=‘\0‘;//字串的題一定不要忘了後面加‘\0‘}void main(){ char* input= "Abort!May Be Some Errors In Out System. "; char output[100]; sortVowel (input, output); puts(output);}
分析:這個題用map的鍵自動排序思想正好,map<char,int>,int記錄每個字元出現的次數,正好索引值char按大小排序,
只是大寫字母排在小寫字母前不符合題目要求,所以用了兩個map來分別記錄,然後把結果寫到output中。