gpt4 book ai didi

c - 使用指针对字符串进行排序

转载 作者:行者123 更新时间:2023-11-30 21:27:54 26 4
gpt4 key购买 nike

我是编程初学者,我现在的讲座是关于指针的主题。我应该从键盘输入字符串(最多 40 个),然后按字母顺序对它们进行排序。

要求是,一旦输入“空”字符串,输入就应该中断,指向字符串的指针应该存储在数组中,排序时我应该移动指向字符串的指针,并且应该使用strcmp 功能。

我已经开始编写我的代码,想问问你我是否走在正确的道路上。有人建议我将字符串存储在二维 char 数组中,但问题是即使我输入空行,程序也会不断询问输入(我想,应该只需按 >输入)。其次,考虑到我在排序方面没有经验,我想向您询问一下对字符串进行排序的最佳算法。

编辑 我对代码做了一些更改,它给出了我期望的输出,按字母顺序对字符串进行排序。然而,如果我的代码中存在任何重大缺陷,或者我可以做出一些改进,我非常感谢在 C 方面更有经验的人的意见。在我不明白的部分中,指针被分配了地址,但是我创建指针数组的方式真的是最有效的吗?我知道我可以使用 malloc 但我想像我一样使用二维数组。

int count = 0;
char arr[40][100];
char (*poi[40])[100]; //Is the array of pointers declared right?

for (int i = 0; i < 40; i++)
{
fgets(arr[i], 101, stdin);
count++;
if (strcmp(arr[i], "\n") == 0)
{
break;
}
}

printf("\n");

for(int i = 0; i < count; i++)
{
poi[i] = &arr[i]; //I don't really understand how this part works, seems to work though
}

for(int i = 0; i < count - 1; i++)
{
for(int j = i + 1; j < count; j++)
{
if(strcmp(*poi[i], *poi[j]) > 0) //if I type here strcmp(arr[i], arr[j]) the output is not sorted properly, why?
{
char (*temp)[100] = poi[i];
poi[i] = poi[j];
poi[j] = temp;

}
}
}


//returns sorted strings
for (int i = 0; i < count; i++)
{
printf("%s", *poi[i]);
}

最佳答案

在我看来,您正在以一种可能不太有效的方式混合 C 和 C++,尽管我不确定。如果您使用 2D 字符数组,那么在我看来您应该使用较低级别的 C 范例。在这种情况下,我将停止使用 cincout并切换到使用 scanfprintf来自 <stdio.h> 的函数族。如果您应该使用 strcmp那么这听起来绝对是您应该走的路线。

至于排序,如果您使用 C 语言,请查看 qsort来自 <stdlib.h> 的函数,如果您被允许使用它。

关于c - 使用指针对字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490401/

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