Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。 |
|
知识点 | 字符串 |
---|---|
运行时间限制 | 0M |
内存限制 | 0 |
输入 |
Lily使用的图片包括"A"到"Z"、"a"到"z"、"0"到"9"。输入字母或数字个数不超过1024。 |
输出 |
Lily的所有图片按照从小到大的顺序输出 |
样例输入 | Ihave1nose2hands10fingers |
样例输出 | 0112Iaadeeefghhinnnorsssv |
思路1:
采用字典法来做,因为只有‘0’—‘9’,‘A’—‘Z’,‘a’—‘z’,所以可以将这作为键,而他们出现的次数作为值,初始化都值为0
再用迭代器一次遍历一遍即可;
思路2:
根据这些符号,把这个字符串遍历多遍,每次将其压入到一个string中,最后输出那个string
下面是AC的代码:
1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 6 map<char,int> ma; 7 8 void sorted(string& str) 9 { 10 for(int i=‘0‘;i<‘9‘;i++) 11 ma[(map<char,int>::key_type)i]=0; 12 for(int i=‘A‘;i<=‘Z‘;i++) 13 ma[(map<char,int>::key_type)i]=0; 14 for(int i=‘a‘;i<‘z‘;i++) 15 ma[(map<char,int>::key_type)i]=0; 16 int len=str.size(); 17 for(int i=0;i<len;i++) 18 ma[str[i]]++; 19 for(map<char,int>::iterator i=ma.begin();i!=ma.end();i++) 20 { 21 map<char,int>::key_type a=i->first; 22 map<char,int>::mapped_type b=i->second; 23 for(map<char,int>::mapped_type j=1;j<=b;j++) 24 cout<<a; 25 } 26 cout<<endl; 27 } 28 29 void sorted2(string& str) 30 { 31 int len=str.size(); 32 string s; 33 for(int i=‘0‘;i<=‘9‘;i++) 34 for(int j=0;j<len;j++) 35 if(str[j]==i) 36 s.push_back(str[j]); 37 for(int i=‘A‘;i<=‘Z‘;i++) 38 for(int j=0;j<len;j++) 39 if(str[j]==i) 40 s.push_back(str[j]); 41 for(int i=‘a‘;i<=‘z‘;i++) 42 for(int j=0;j<len;j++) 43 if(str[j]==i) 44 s.push_back(str[j]); 45 cout<<s<<endl; 46 } 47 int main() 48 { 49 string str; 50 getline(cin,str); 51 sorted(str); 52 53 system("pause"); 54 }
时间: 2024-10-14 05:36:14