字符串排序输入字符串与原来输入顺序一样
[
#include<stdio.h>
#include<string.h>
int main()
{
void fun(char *p1,char *p2,char *p3);
char str1[80],str2[80],str3[80];
printf("输入三个字符串:");
scanf("%s%s%s",str1,str2,str3);
fun(str1,str2,str3);
printf("%s,%s,%s",str1,str2,str3);
return 0;
}
void fun(char *p1,char *p2,char *p3)
{
char *t;
if(strcmp(p1,p2)>0){
t=p1;
p1=p2;
p2=t;
}
if(strcmp(p2,p3)>0){
t=p2;
p2=p3;
p3=t;
}
if(strcmp(p1,p3)>0){
t=p1;
p1=p3;
p3=t;
}
return;
}
要交换指针的引用的值才行,另外 第三次比较 也要是 p1 和 p2
修改如下:
#include<stdio.h>
#include<string.h>
int main()
{
void fun(char *p1,char *p2,char *p3);
char str1[80],str2[80],str3[80];
printf("输入三个字符串:\n");
scanf("%s%s%s",str1,str2,str3);
fun(str1,str2,str3);
printf("%s,%s,%s",str1,str2,str3);
return 0;
}
void fun(char *p1,char *p2,char *p3)
{
char t[80];
if(strcmp(p1,p2)>0){
strcpy(t, p1);
strcpy(p1, p2);
strcpy(p2, t);
}
if(strcmp(p2,p3)>0){
strcpy(t, p2);
strcpy(p2, p3);
strcpy(p3, t);
}
if(strcmp(p1,p2)>0){
strcpy(t, p1);
strcpy(p1, p2);
strcpy(p2, t);
}
}
你这样交换了一个寂寞
char *t;
->
char t[80];
t=p1;
->
strcpy(t, p1);
别的类似
字符串匹配,数据的计算,数组的相关计算等(重点在于理解流程图和算法)
可能的原因:
1.排序算法本身存在问题:如果使用的排序算法不正确或者实现有误,就可能导致结果与预期不符。可以通过查看自己的代码或者对比不同排序算法的实现来判断是否存在这方面的问题。
2.输入数据本身存在问题:如果输入的数据并不是按照预期的顺序排列,那么排序结果就不会符合预期。可以通过检查输入数据的顺序来判断是否存在这方面的问题。
3.代码中的错误:代码中可能存在语法错误、逻辑错误等等,导致排序结果与预期不符。可以通过检查代码或者进行调试来判断是否存在这方面的问题。
4.字符数组本身的问题:字符数组可能存在非预期的字符、不可见字符、空字符等等,导致排序结果不符合预期。可以通过检查字符数组中的每个字符来判断是否存在这方面的问题。
解决方案:
1.检查使用的排序算法是否正确,并对算法实现进行修正,确保实现正确性。
2.检查输入数据,确认其是否按照预期的顺序排列,并进行排序之前的预处理,保证输入数据正确性。
3.对代码进行调试,确认是否存在语法错误、逻辑错误等等,对代码进行修改或优化,增强代码的可读性和正确性。
4.对字符数组进行检查,确认其中是否存在非预期的字符、不可见字符、空字符等等,并进行清理或替换,确保字符数组的正确性。