作业帮 > 综合 > 作业

一道有关排序的题目(和结构体有关),我想请教如何做?(C++)

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/03/28 19:29:53
一道有关排序的题目(和结构体有关),我想请教如何做?(C++)
给一些数字,按一定的规则排序然后输出。规则有点像字典序(但不全是)。规则:1.如果两个数字长度相同,两个数字先比较第一个数字,谁大谁先输出。如果第一个相同,比第二个,谁大谁先输出。第2个也相同,比第3个,以此类推。。。。2.如果两个数字长度不同,那就补充短的,像这样,比如786和7863424,那就将786中的第一个数字补上,补成7867777,使它和7863424长度相同,然后在比较。这时应该先输出786。比如786和7867783,将786补成7867777,这时先输出7867783,然后输出786.
我知道这样的问题要宣布一个规则,然后利用sort按这个规则排序,可是我不太懂相关的语法格式,谁可以给我重要部分的代码?
一道有关排序的题目(和结构体有关),我想请教如何做?(C++)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(const string& a, const string& b) {
\x09int len = max(a.size(), b.size());
\x09for(int i = 0; i < len; i++) {
\x09\x09char ac = i < a.size() ? a[i] : a[0];
\x09\x09char bc = i < b.size() ? b[i] : b[0];
\x09\x09if(ac > bc) return true;
\x09\x09else if(ac < bc) return false;
\x09}
\x09return false;
}

int main() {
\x09string number;
\x09vector<string> numbers;
\x09while(cin >> number) {
\x09\x09numbers.push_back(number);
\x09}
\x09sort(numbers.begin(), numbers.end(), cmp);
\x09for(int i = 0; i < numbers.size(); i++) {
\x09\x09cout << numbers[i] << endl;
\x09}
\x09return 0;
}http://ideone.com/a0oa4P
再问: 我还有一个小问题,我发现用sort()函数无法直接对二维字符数组排序,我看到别人这样排,char s[50][100]; for(int i=0; i> s[i]; qsort(s,N,sizeof(s[0]),cmp);
我想问qsort()函数如何使用、。假如:我想让qsort仅仅对二维字符数组从第2个(下标为1)到第6个(下标为5)排序,如何使用???
再答: sort和qsort是几乎一样的,除了comparator的写法不一样如果是只对第2个到第6个排序,则使用qsort(s+1, 5, sizeof(s[1]), cmp);