用指针方法对字符数组排序

img


大家帮我看一下,这个交换函数哪里有问题?为什么运行时是原样输出?错在哪里,为什么。

你的思路是没错的,首先明白函数参数是按值传递,所以要修改指针本身的值必须用二级指针也就是指向指针的指针。
字符数组名本身是常量指针是无法修改的!所以必须要定义变量指针指向字符串。

仅供参考!
指针排序只交换指向,并没有复制任何数据。所以效率比复制数据高,尤其是大量数据时就提现指针的优势。

img

#include <stdio.h>
#include <string.h>
int main()
{
    void swap(char **, char **);
    char st1[20], st2[20], st3[20];
    char *p1, *p2, *p3;

    p1 = st1;
    p2 = st2;
    p3 = st3;

    fgets(st1, 19, stdin);
    fgets(st2, 19, stdin);
    fgets(st3, 19, stdin);

    if (strcmp(p1, p2) > 0)
        swap(&p1, &p2);
    if (strcmp(p1, p3) > 0)
        swap(&p1, &p3);
    if (strcmp(p2, p3) > 0)
        swap(&p2, &p3);

    printf("\n%s%s%s", p1, p2, p3);

    return 0;
}

void swap(char **a, char **b)
{
    char *tmp = *a;
    *a = *b;
    *b = tmp;
}


要用strcpy交换,光交换指针没用
这个问题昨天回答过 https://ask.csdn.net/questions/7959325/54228807
你是他同学?

#include <stdio.h>
#include <string.h>
int main()
{
    void mystrcmp(char *, char *); //注意,strcmp已经是库函数了,你要换一个名字
    char *p1, *p2, *p3;
    char a[100], b[100], c[100];
    p1 = &a;
    p2 = &b;
    p3 = &c;
    scanf("%s", p1);
    scanf("%s", p2);
    scanf("%s", p3);
    mystrcmp(a, b);
    mystrcmp(b, c);
    mystrcmp(a, b);
    printf("从小到大输出为:\n%s %s %s", p1, p2, p3);
    return 0;
}
void mystrcmp(char * a, char * b)
{
    char tmp[100];
    if (strcmp(a, b) > 0)
    {
        strcpy(tmp, a);
        strcpy(a, b);
        strcpy(b, tmp);
    }
}
 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^