在C中对字符串数组进行排序

时间:2014-11-16 14:14:31

标签: c arrays sorting

#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个字符串的给定列表进行排序。该程序获取所有字符串,但然后它冻结并且不对它们进行排序。谁能告诉我哪里出错了?提前谢谢。

1 个答案:

答案 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;
        }
}