糖式烤鹅儿 2023-06-02 14:59 采纳率: 100%
浏览 60
已结题

求解答:使用指针进行字符串内排序 输出出现一串烫

任务目标
采用指针变量作为形参,编写一个实现两字符交换的函数。在主函数中输入一个字符串,调用字符交换函数将其中的字符按从小到大的顺序排序后输出。

我的解决方案如下


#include <stdio.h>
void main()
{
    char str[80], i, j;
    void swap(char* pa, char* pb);
    gets(str);
    int a;
    for (a = 79; a >= 0; a--)
        if (str[a] != '\0')
        {
            a++;
            break;
        }
    int m,n;
    char* p1=&i, * p2=&j;
    for(m = 0; m < a; m++)
        for (n = 1; n < a - m; n++)
        {
            i = str[n]; j = str[n - 1];
            if (i<j)
            {
                swap(p1, p2);
            }
            str[n] = i; str[n - 1] = j;
        }
    printf("%s\n", str);
}
void swap(char* pa, char* pb) 
{
    char ch;
    ch = *pa;
    *pa = *pb;
    *pb = ch;
}

但是在实际使用时,
输入:
ekfdac
目标输出:
acdefk
但是实际输出了 '(一串子)烫?'
请问问题出在哪里,求解答谢谢!

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-06-02 15:51
    关注

    这样写,供参考:

    #include <stdio.h>
    void main()
    {
        char str[80], i, j;
        void swap(char* pa, char* pb);
        gets(str);
        //************Begin***********
        for (i = 0; str[i + 1]; i++)
            for (j = i + 1; str[j]; j++)
                if (str[i] > str[j])
                    swap(&str[i], &str[j]);
        //************End***********
        printf("%s\n", str); //输出排序后的字符串
    }
    void swap(char* pa, char* pb) //自定义函数实现两字符交换
    {
        //************Begin***********
        char tmp;
        tmp = *pa;
        *pa = *pb;
        *pb = tmp;
        //************End***********
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 创建了问题 6月2日