0
已解决
#include<bits/stdc++.h>
using namespace std;
string a[10005];
int number(string s){
int cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
cnt++;
}
}
return cnt;
}
int letter(string s){
int cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'){
cnt++;
}
}
return cnt;
}
bool cmp(string a,string b){
if(number(a)!=number(b)){
return number(a)<number(b);
}
else if(letter(a)!=letter(b)){
return letter(a)>letter(b);
}
else{
return a>b;
}
}
int main(){
int n;
cin>>n;
getline(cin,a[0]);
for(int i=1;i<=n;i++){
getline(cin,a[i]);
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i]<<endl;
}
return 0;
}
哪错了
0
已采纳
给两个重要的函数:
int zm(string a){
cnt1=0;
for(int i=0;i<a.size();i++){
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
cnt1++;
}
return cnt1;
}
bool cmp(string a,string b){
if(zm(a)!=zm(b)){
return zm(a)<zm(b);
}
return a<b;
}
望采纳!
0
这题确实挺水
你先输入数据(注意用getline输入,输入n后getchar)
然后用函数将每个字符串内字母的个数算出来
if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')c++;
return c;
在根据字母个数从小到大排序,如果个数一样,再根据字典序从小到大排序
0
思路:
定义n,字符串s[10010],定义函数cmp(string a,string b),在函数里定义cnta,cntb,都清零,遍历字符串a,判断a[i]是字母,cnta++(字符串b同理),统计完后判断cnta不等于cntb,返回cnta>cntb,否则返回a<b//主函数外
--------------------分----------------------------割------------------------------线----------
输入n,getline输入s[0]吃换行,循环1~n,每次getline一个s[i],输入后再循环外面sort排序,最后循环输出s[i]即可AC
望采纳~
0
0