用指向指针的指针的方法对n个字符串排序并输出。要求将排序单独写成一个函数。n和各整数在主函数中输入。最后在主函数中输出


#include
#include
int main()
{
    void sort(char **p,int m);
    int i,n;
    char **p,pstr[50],str[50][50];
    printf("输入n:");
    scanf("%d",&n);
    for(i=0;i<50;i++)
        pstr[i]=str[i];
    printf("输入%d个字符串:\n",n);
    for(i=0;iscanf("%s",pstr[i]);
    p=pstr;
    sort(p,n);
    printf("排序后的字符串为:");
    for(i=0;iprintf("%s\n",pstr[i]);
    printf("\n");
    return 0; 
}

void sort(char **p,int m)
{
    int i,j;
    char *t;
    for(i=0;ifor(j=i+1;jif(strcmp(*(p+i),*(p+j))>0)
            {
                t=*(p+i);
                *(p+i)=*(p+j);
                *(p+j)=t;
            }
        }
    }
}

题主代码修改如下,pstr[50] 应定义为指针数组 *pstr[50],供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    void sort(char** p, int m);
    int i, n;
    char** p, *pstr[50], str[50][50]; //修改
    printf("输入n:");
    scanf("%d", &n);
    for (i = 0; i < 50; i++)
        pstr[i] = str[i];
    printf("输入%d个字符串:\n", n);
    for (i = 0; i < n; i++)
        scanf("%s", pstr[i]);
    p = pstr;
    sort(p, n);
    printf("排序后的字符串为:\n");
    for (i = 0; i < n; i++)
        printf("%s\n", pstr[i]);
    printf("\n");
    return 0;
}
void sort(char** p, int m)
{
    int i, j;
    char* t;
    for (i = 0; i < m; i++)
    {
        for (j = i + 1; j < m; j++)
        {
            if (strcmp(*(p + i), *(p + j)) > 0)
            {
                t = *(p + i);
                *(p + i) = *(p + j);
                *(p + j) = t;
            }
        }
    }
}