75分,蒟蒻关于sort函数cmp的问题
查看原帖
75分,蒟蒻关于sort函数cmp的问题
553245
Hansitory楼主2022/4/27 13:31

本题第一想法是把数字读入成字符串,进行sort排序 再输出,但是在数字字符串排序的时候遇到了问题,代码如下:

#include <iostream>
#include <string>
#include <algorithm>
int cmp(string a, string b){
	int l = min(a.size(), b.size());
	for(int i=0; i<l; i++) if(a[i]!=b[i]) return a[i] > b[i];
    //我的写法
	if(a.size() > b.size()) return a[l] > b[0];
	return b[l] > a[0];
	//return a+b > b+a; 题解写法
}

int main(){
	int n; cin >> n;
	string s[21];
	for(int i=0; i<n; i++) cin >> s[i];
	sort(s, s+n, cmp);
	for(int i=0; i<n; i++) cout << s[i];
	return 0;
} 

测试时考虑了特殊数据:输入 n=2,a=234,b=23n=2, a=234, b=23, 此时测试程序知 cmp(a,b)=1cmp(a,b)=1,个人理解是应该把 aa 排在前面 s[0] 位置,把 bb 排在后面 s[1] 位置,但是输出结果是 23234; 输入 n=2,a=231,b=23n=2, a=231, b=23, 同样有错误输出 23123;但是如果输入时交换a,ba,b位置就会输出正确结果(分别是 23423 和 23231)。 请问有没有大佬懂得其中的原理啊QwQ

2022/4/27 13:31
加载中...