请帮我看一下这个排序
我希望的是 按照switch排序,*switch指向的unsigned char里的值是3,1,2,4,2,3
做出的结果总是不对,不知道怎么回事。
请高手帮我看一下吧。多谢了。
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
typedef struct {
char* wave;
unsigned char* switch;
int test;
} Reserve;
// compare swtich
int swtichcmp(const Reserve *x, const Reserve *y)
{
return (strcmp((char*)x->switch, (char*)y->switch));
}
//compare test small->large
int testcmp(const Reserve *x, const Reserve *y)
{
return (x->test < y->test ? -1 : x->test < y->test ? 1 : 0);
}
void print_Reserve(Reserve x)
{
printf("%-10.10s %-10.10s %d\n", x.wave, x.swtich, x.test);
}
int main(int argc, char *argv[])
{
int i;
unsigned char xp[] = {'3', '1', '2','4','2','3'};
unsigned char* b=xp;
Reserve x[]= {{"3", b , 52},
{"4", (b+4), 22},
{"5", (b+8), 48},
{"2", (b+3), 42},
{"7", (b+4), 54},
{"6", (b+5), 55},
};
int nx = sizeof(x) / sizeof(x[0]);
cout << "Before sort " << endl;
for (i = 0; i < nx; i++)
print_Reserve(x[i]);
//sort swtich
qsort(x, nx, sizeof(Reserve), (int(*)(const void*, const
void*))swtichcmp);
cout << "After sorting by switch " << endl;
for (i = 0; i < nx; i++)
print_Reserve(x[i]);
//sort test
qsort(x, nx, sizeof(Reserve), (int(*)(const void*, const
void*))testcmp);
cout << "After sorting by test " << endl;
for (i = 0; i < nx; i++)
print_Reserve(x[i]);
return (0);
}
问题点数:20、回复次数:5Top
1 楼arrowcy(长弓手)回复于 2005-04-03 21:53:47 得分 20
怎么用switch?不要随便用这些关键字做变量名阿Top
2 楼arrowcy(长弓手)回复于 2005-04-03 21:54:32 得分 0
怎么用switch?不要随便用这些关键字做变量名阿Top
3 楼arrowcy(长弓手)回复于 2005-04-03 21:57:24 得分 0
我在vc里面试运行这个程序,结果错误一大堆,其中第一个错误就是那个switch,建议你先把这些错误修改了再说吧,如果修改过程中遇到什么困难再上来问也可以的Top
4 楼eagleteaglet(eaglet)回复于 2005-04-04 10:18:40 得分 0
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
typedef struct {
char* wave;
unsigned char* wavetime;
int test;
} Reserve;
// compare wavetime
int swtichcmp(const Reserve *x, const Reserve *y)
{
return (strcmp((char*)x->wavetime, (char*)y->wavetime));
}
//compare test small->large
int testcmp(const Reserve *x, const Reserve *y)
{
return (x->test < y->test ? -1 : x->test < y->test ? 1 : 0);
}
void print_Reserve(Reserve x)
{
printf("%-10.10s %-10.10s %d\n", x.wave, x.swtich, x.test);
}
int main(int argc, char *argv[])
{
int i;
unsigned char xp[] = {'3', '1', '2','4','2','3'};
unsigned char* b=xp;
Reserve x[]= {{"3", b , 52},
{"4", (b+4), 22},
{"5", (b+8), 48},
{"2", (b+3), 42},
{"7", (b+4), 54},
{"6", (b+5), 55},
};
int nx = sizeof(x) / sizeof(x[0]);
cout << "Before sort " << endl;
for (i = 0; i < nx; i++)
print_Reserve(x[i]);
//sort wavetime
qsort(x, nx, sizeof(Reserve), (int(*)(const void*, const
void*))swtichcmp);
cout << "After sorting by wavetime " << endl;
for (i = 0; i < nx; i++)
print_Reserve(x[i]);
//sort test
qsort(x, nx, sizeof(Reserve), (int(*)(const void*, const
void*))testcmp);
cout << "After sorting by test " << endl;
for (i = 0; i < nx; i++)
print_Reserve(x[i]);
return (0);
}
这次应该没什么问题了。但输出的不是我所希望的Top
5 楼eagleteaglet(eaglet)回复于 2005-04-05 20:58:54 得分 0
我的那些准师父们为啥没有帮我的呢Top




