问题标题: 酷町堂:3983 字符串排序2

0
0
已解决
李宜和
李宜和
高级启示者
高级启示者
#include<bits/stdc++.h>
using namespace std; 
string a[10010]; 
string tq(string s){ 
    string z; 
    for(int i=0;i<s.size();i++){ 
        if(s[i]>='0'&&s[i]<='9') 
        z=z+s[i]; 
    } 
    return z; 
} 
int sz(string z){ 
    int sum=0; 
    for(int i=0;i<z.size();i++){ 
        if(z[i]>='0'&&z[i]<='9') 
        sum+=z[i]-'0'; 
    } 
    return sum; 
} 
bool cmp(string x,string y){ 
    if(sz(x)!=sz(y))
        return sz(x)>sz(y); 
    else if(tq(x)!=tq(y)) 
        return tq(x)<tq(y); 
    return x<y; 
}
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 cnt=0;

    for(int i=0;i<=s.size()-1;i++){

        if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z'){

cnt++;

        }

    }

return cnt;

}

bool cmp(string x,string y){

    if(count(x)!=count(y))

    return count(x)<count(y);

return x<y;

}

 

 

主函数核心

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

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
0
潘艺博
潘艺博
初级天翼
初级天翼

你搞那么多函数干啥?还有,这代码和题目完全对不上,这代码是有趣的是排序3,你这题是字符串排序2,你......

思路:定义n和字符串数组s[10010],bool cmp(string a,string b),在函数里定义cnta和cntb,遍历字符串a,判断a[i]是字母,cnta++(字符串b同理),之后判断cnta!=cntb,返回cnta>cntb,否则返回a<b//主函数外

-------------------分-----------------------------割---------------------------线-------------

输入n,getline(cin,s[0])吃换行,再循环getline一个s[i],循环后sort排序,最后循环输出s[i]//主函数内

即可AC

望采纳~

0
被禁言 汪子晨
汪子晨
修练者
修练者

这可真是一道可怕的题!代码奉上!

string a[10005];
整型 count(string s){
    整型 cnt=0;
    循环(int i=0;i<s.size();i++){
        如果(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') cnt++;
    }
    return cnt;
}
bool cmp(string a,string b){
    如果(count(a)!=count(b))
        return count(a)<count(b);
        return a<b;
}

int main(){
    整型 n;
    输入>>n;
    getline(cin,a[0]);
    循环(int i=1;i<=n;i++){
        getline(cin,a[i]);
    }
    排序(a+1,a+n+1,cmp);
    循环(int i=1;i<=n;i++){
        输出<<a[i]<<endl;
    }

 

AC100 望采纳!

我要回答