如何在 C 中输出冒泡排序的二维字符串数组?
How do I output a bubble sorted 2-D string array in C?
我如何使用冒泡排序(或与此相关的任何其他类型的排序)对 C 中的二维字符串数组进行排序?
我正在尝试做的事情如下:
示例:
未排序的二维字符串数组:
abfg
abcd
xyzw
pqrs
orde
已排序的二维字符串数组:
abcd
abfg
orde
pqrs
xyzw
我当前的算法不起作用(给我一个不兼容错误)如下:
#include <stdio.h>
#include<string.h>
int main()
{
char str[5][4];
int i,j;
char temp[4];
for (i=0;i<5;i++)
{
scanf("%s",str[i]);
}
for(i = 0; i<5-1; i++)
{
for(j = 0; j<5-1; j++)
{
if(strcmp(str[j],str[j+1])== -1)
{
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
for(i = 0; i< 5; i++)
printf("%s ", str[i]);
return 0;
}
数组不可分配,因为您在 C 中尝试。您需要设置一些缓冲区交换逻辑。例如。
if(strcmp(str[j+1],str[j]) < 0) // note: fixed.
{
strcpy(temp, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], temp);
}
您的代码的其他问题:
- 输入数组的大小不正确。所有这些字符串至少需要
char[5]
来容纳四字符字符串(包括终止符 space)。
- 您没有对输入字符串的长度进行长度限制。对于四个字符的数组,格式字符串应为
"%3s"
,这会暗示您的维度太短而无法开始。
- 您没有通过检查
scanf
的结果来验证输入是否成功
- 与上述相关,您确实知道跟踪了多少成功输入,因此您不知道您的数据排序是否针对不确定的垃圾。如果只输入3个字符串成功,对5个字符串的数组进行排序是没有意义的。
- 您的冒泡排序未正确实施。真正的 bubblesort 包括 swap-detection,它在任何给定的 pass 导致无交换后停止排序算法。您也没有将每次迭代扫描的元素数量减少一个,这首先是冒泡排序的要点。
无论如何,所有这些都与您的代码有关,但与您发布的问题无关。无论如何都值得一看。
祝你好运。
我如何使用冒泡排序(或与此相关的任何其他类型的排序)对 C 中的二维字符串数组进行排序? 我正在尝试做的事情如下:
示例:
未排序的二维字符串数组:
abfg
abcd
xyzw
pqrs
orde
已排序的二维字符串数组:
abcd
abfg
orde
pqrs
xyzw
我当前的算法不起作用(给我一个不兼容错误)如下:
#include <stdio.h>
#include<string.h>
int main()
{
char str[5][4];
int i,j;
char temp[4];
for (i=0;i<5;i++)
{
scanf("%s",str[i]);
}
for(i = 0; i<5-1; i++)
{
for(j = 0; j<5-1; j++)
{
if(strcmp(str[j],str[j+1])== -1)
{
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
for(i = 0; i< 5; i++)
printf("%s ", str[i]);
return 0;
}
数组不可分配,因为您在 C 中尝试。您需要设置一些缓冲区交换逻辑。例如。
if(strcmp(str[j+1],str[j]) < 0) // note: fixed.
{
strcpy(temp, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], temp);
}
您的代码的其他问题:
- 输入数组的大小不正确。所有这些字符串至少需要
char[5]
来容纳四字符字符串(包括终止符 space)。 - 您没有对输入字符串的长度进行长度限制。对于四个字符的数组,格式字符串应为
"%3s"
,这会暗示您的维度太短而无法开始。 - 您没有通过检查
scanf
的结果来验证输入是否成功
- 与上述相关,您确实知道跟踪了多少成功输入,因此您不知道您的数据排序是否针对不确定的垃圾。如果只输入3个字符串成功,对5个字符串的数组进行排序是没有意义的。
- 您的冒泡排序未正确实施。真正的 bubblesort 包括 swap-detection,它在任何给定的 pass 导致无交换后停止排序算法。您也没有将每次迭代扫描的元素数量减少一个,这首先是冒泡排序的要点。
无论如何,所有这些都与您的代码有关,但与您发布的问题无关。无论如何都值得一看。
祝你好运。