首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

sort 二维数组排序解决方法

2013-08-24 
sort 二维数组排序一个小的测试程序,但是结果却不对。#include iostream#include string.h#include cs

sort 二维数组排序
一个小的测试程序,但是结果却不对。


#include <iostream>
#include <string.h>
#include <cstdlib>
#include <algorithm>
using namespace std;
char *A[4];
int cmp(const char *a, const char *b) {
    return strcmp(a, b);
}
int main()
{
    A[1] = "hello";
    A[2] = "my";
    A[3] = "zzz";
    A[0] = "world";
    sort(A, A+4, cmp);
    int i;
    for(i=0; i<4; i++) cout << A[i] << endl;
    return 0;
}

希望A的4个字符串能按字典序输出。但是结果却不对。 二维数组 sort
[解决办法]
换成这样再试试呢。

return strcmp(a, b)<0;

[解决办法]
引用:
Quote: 引用:

改这样, 以测试 OK

bool cmp(const char *a, const char *b)
{
     if( strcmp(a, b) < 0 ) 
         return true;
     else 
         return false;
}

能不能解释下原先的为什么不正确?


前者小的时候,结果负数,但是不为零,结果为真,交换数据
前者大的时候,结果正数,结果还是不为零,为真 ,交换数据

那个函数只是判断结果 是零 还是非零, 你这样写 不管大小, 都是非零的

除非相等

[解决办法]
引用:
Quote: 引用:

int cmp(const char *a, const char *b) {
    return strcmp(a, b);
}

改成
bool cmp(const char *a, const char *b) { 


    return strcmp(a, b) <= 0;//<=都表示位置正确
}


能不能解释一下原先为什么不正确?


原先的函数类型是int ,而sort要求的比较函数是bool类型的
再看 strcmp(a, b) 
a < b 返回 -1
a = b 返回 0
a > b 返回 1
当你直接  return strcmp(a, b) 的时候,只有a = b的时候是0,其他都是非0
而在sort中,如果有比较函数,会用 cmp 和 !cmp来进行位置判断。
在sort中,按照这个标准就把字符串位置换来换去,结果错误。

所以 用return strcmp(a, b) <=0 这样告诉sort 当a <= b的时候,2个字符串的位置正确

热点排行