任务目标
采用指针变量作为形参,编写一个实现两字符交换的函数。在主函数中输入一个字符串,调用字符交换函数将其中的字符按从小到大的顺序排序后输出。
我的解决方案如下
#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
但是实际输出了 '(一串子)烫?'
请问问题出在哪里,求解答谢谢!
这样写,供参考:
#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***********
}
你这代码问题多了
写代码之前要先会看代码,不要老写自己看不懂的代码
你循环过程中p1p2的地址一直都不变,就两个字符来回交换
整个逻辑都是错的,就别介意有点bug了
原题干:
#include <stdio.h>
void main()
{
char str[80], i, j;
void swap(char *pa,char *pb);
gets(str);
//************Begin***********
//************End***********
printf("%s\n", str); //输出排序后的字符串
}
void swap(char *pa,char *pb) //自定义函数实现两字符交换
{
//************Begin***********
//************End***********
}