#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i,j;
char temp[10];
char **A;
A=(char**)malloc(10*sizeof(char*));
for(i=0;i<10;i++)
A[i]=(char*)malloc(100*sizeof(char));
printf("Enter the words you would like to sort :\n");
for(i=0;i<10;i++)
gets( *A );
for(i=0; i < 10 ; i++)
{
{
if(strcmp(A[i],A[i+1]) > 0)
{
strcpy(temp,A[i]);
strcpy(A[i],A[i+1]);
strcpy(A[i+1],temp);
}
}
}
for (i = 0; i < 10; i++)
printf("%s\n", A[i]);
return 0;
}
我正在尝试编写一个C程序,按字母顺序对10个字符串的给定列表进行排序。该程序获取所有字符串,但然后它冻结并且不对它们进行排序。谁能告诉我哪里出错了?提前谢谢。
答案 0 :(得分:3)
你的获取(* A)会覆盖先前的输入。你应该使用gets(A [i])代替。
你也应该使用c内置排序乐趣:qsort(A,sizeof(char *),10,strcmp);而不是手动冒泡。
如果你想要它手工制作,而不是复制字符串,你应该只是交换指针。
for (int i=0; i<9; i++)
{
for (int j=i+1; j<10; j++)
if (strcmp(A[i],A[j])>0)
{
char* t=A[i];
A[i]=A[j];
A[j]=t;
}
}