gpt4 book ai didi

c - Bubblesort 忽略最后一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:18 27 4
gpt4 key购买 nike

我正在尝试根据指针指向的字符串对指针数组进行排序。我的 bubblesort 实现似乎忽略了我传递给它的最后一个元素。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void swap(char **a,char **b);
int main(void);

int main(void)
{
char *ptr[1000]; //build an array of 1000 pointers
short ptrpos = 0; //start at 0th pointer
char input[500];
printf("Enter strings(names), seperate by newline\nEOF(Ctrl-D) finishes the input process.\n");
while(fgets(input,sizeof(input),stdin))
{
ptr[ptrpos] = malloc(strlen(input)+1);
strcpy(ptr[ptrpos],input);
ptrpos++;
}
short length = ptrpos-1;

//BEGIN BUBBLE SORT
for(short h = 1; h < length; h++)
{
for(short i = 0;i < length - h; i++)
{
if(strcmp(ptr[i],ptr[i+1]) > 0)
swap(&ptr[i],&ptr[i+1]);
}
}
//END BUBBLE SORT
printf("\n----- Sorted List -----\n");
for(ptrpos = 0;ptrpos <= length;ptrpos++)
printf("%s",ptr[ptrpos]);

return 0;
}
void swap(char **a,char **b) //swaps adresses of passed pointers
{
char *temp = *a;
*a = *b;
*b = temp;
}

输出看起来像这样:

Enter strings(names), seperate by newlineEOF(Ctrl-D) finishes the input process.EchoCharlieFoxtrotAlphaGolfBravoDelta----- Sorted List -----AlphaBravoCharlieEchoFoxtrotGolfDelta 

为什么忽略最后一个字符串?我是否遗漏了一些明显的东西?

最佳答案

数字只是示例。

ptrpos0 开始计数这意味着如果你有 6 个元素,ptrpos6在你的 while 的最后一次迭代之后环形。当您使用

计算长度时
short length = ptrpos-1;

你得到 length = 5 .

你的 for -循环终止于 counter < length这意味着它们只计数到 4,这会产生 5 个元素而不是 6 个。

由于数组的实际长度是6,我建议你把提到的那行改成

short length = ptrpos;

现在length将等于数组中元素的数量。

关于c - Bubblesort 忽略最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50736629/

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