问题标题: 酷町堂:3983 字符串排序2 好久没学了,卡在水题上了。。。

0
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
程子萱
程子萱
资深守护
资深守护

孩子,课都上完了,你上节课的课后作业才做了一题?

我要回答