gpt4 book ai didi

c - QSort 索引字符**

转载 作者:行者123 更新时间:2023-11-30 17:03:42 25 4
gpt4 key购买 nike

我必须对此进行排序:

char ** lu

它包含这样的行:

807 qmuftnqrjalreihiqblaplydrixyvzenlasfojyxlloptyakbnmqymwputqstufguylkjlkux

每行开头都有一个数字,我需要用它对它们进行排序

但是我不知道如何使用strtol是quicksort的cmp_fct

代码示例:

    char ** lu = NULL;
int nlu = 0;
size_t n_byte = 10000*8; // 10000 octects par ligne cf:énoncé

void lire(FILE * from){ //rm data.out && ./a.out < data.in > data.out && cmp -b data.in data.out

char* ligne = malloc(n_byte);
lu = malloc(n_byte);
assert(lu != NULL);
assert(ligne != NULL);


while(getline(&ligne, &n_byte, from) != -1) // getline return -1 on failure to read a line (including end-of-file condition)
{
if (ligne[strlen(ligne) - 1] != '\n')
fprintf(stderr, "Aie ! Ligne trop longue (%d max)\n", MaxCar);

else
ligne[strlen(ligne) - 1] = '\0';

if (nlu == MaxLig)
{
fprintf(stderr, "Aie ! Trop de lignes (%d max)\n", MaxLig);
break;
}

lu[nlu] = malloc(n_byte);
assert(lu != NULL);
assert(lu[nlu] != NULL);
memcpy(lu[nlu], ligne, n_byte); /* /?\ + standard que strdup /?\*/

if (lu[nlu] == NULL){
fprintf(stderr, "Aie ! Plus de mémoire\n");
exit(1);
}
nlu += 1;
}
}

static int int_cmp(const void *a, const void *b)
{
const long ia = strtol(a, NULL, 10); // casting pointer types
const long ib = strtol(b, NULL, 10); // casting pointer types
printf("\n ia =%ld", ia);
printf("\n ib =%ld", ib);
if(ia < ib)
return -1;
return ia > ib;
}

void
ecrire(FILE * to){
int i;

for(i = 0; i < nlu; i++)
printf("%s\n", lu[i]);
}

int
main(int ac, char * av[]){
lire(stdin);
qsort(lu, nlu, sizeof(lu[0]), int_cmp);
ecrire(stdout);
return 0;
}

我如何使用快速排序:

qsort(lu, nlu, sizeof(lu[0]), int_cmp);

nlu是要排序的行数

我想我必须在 strtol() 中使用 ab 但 strtol 显示了错误的索引(0 或 1)

strtol() 原型(prototype): long int strtol(const char *str, char **endptr, int base)

这里的问题:(用于 int_comp 的测试)

ia =0 ib =0 ia =0 ib =0 ia =0 ib =0 ia =0

感谢帮助

最佳答案

以十进制整数开头的字符串的 qsort() 比较回调应该类似于:

static int int_cmp(const void *a, const void *b) 
{
const long la = strtol(a, NULL, 10);
const long lb = strtol(b, NULL, 10);
if(la < lb)
return -1;
return la > lb;
}

不要在返回中使用减法,这可能会导致整数溢出错误。

此外,please don't cast the return value of malloc() in C .

关于c - QSort 索引字符**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36064956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com