刚才在群里看别人发了一个题目

 这是一道排序+字符串处理的题目,难度属于PAT乙级,五题中的第三题。

分析:字典序就是字符串在字典中的顺序。例如,

1。“A”的字典序小于“a”;

2。"a"的字典序小于”b“;

3。”aa“的字典序小于”aaaa“

4。"aaaa"的字典序小于”aab“的字典序,这里从最高位,一个字符一个字符的比较。

5。“Aa”的字典序小于"aa"

#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(string a,string b) {
    //计算单词ASCII值,并转小写单词
    int sum1 = 0,sum2 = 0;
    for(int i = 0 ; i < a.size(); ++i) {
        sum1 += a[i];
        a[i] = tolower(a[i]);
    }
    for(int i = 0 ; i < b.size(); ++i) {
        sum2 += b[i];
        b[i] = tolower(b[i]);
    }
    if(a != b) return a < b;//比较小写单词 
    else return sum1 < sum2;//单词一样,就比较ASCII和 
}

int main() {
    int n;
    string str[100];
    cin>>n;
    for(int i = 0; i < n; ++i)//输入n个 单词
        cin>>str[i];
    sort(str,str+n,cmp);//根据转换成小写单词后的字典序,原单词的ASCII码,对单词排序
    for(int i = 0; i < n;++i){
        if(i > 0) printf(" ");
        cout<<str[i];
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/keep23456/p/12356278.html
今日推荐