C语言,求三个字符串由小到大排序,不知道那里出错了!!求指点!

struggle_007 2014-09-16 11:32:51
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void swap(char *p1,char *p2)
{
char * c;
c=p1;
p1=p2;
p2=c;

}
int main(void)
{
char ch1[50];
char ch2[50];
char ch3[50];
char * q1=ch1;
char * q2=ch2;
char * q3=ch3;
printf("请输入三个字符串\n");
scanf("%s",ch1);
scanf("%s",ch2);
scanf("%s",ch3);
printf("\n");
if(strcmp(ch1,ch2)>0)
swap(q1,q2);
if(strcmp(ch1,ch3)>0)
swap(q1,q3);
if(strcmp(ch2,ch3)>0)
swap(q2,q3);
printf("%s\n",ch1);
printf("%s\n",ch2);
printf("%s\n",ch3);
return 0;
}
...全文
267 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
struggle_007 2014-09-20
  • 打赏
  • 举报
回复
谢谢 我找到了!!!
引用 9 楼 zjq9931 的回复:
解决了就好,代码模式显示,要用代码标签,发帖栏的上方,倒数第六个 [quote=引用 8 楼 struggle_007 的回复:] 方法二,用到了strcpy函数,能成功~ 为啥把东西贴出来后都自动左对齐了??? #include<stdio.h> #include<string.h> #include<stdlib.h> void swap(char *p1,char *p2) { char temp[50]; strcpy(temp,p1); strcpy(p1,p2); strcpy(p2,temp); } int main(void) { char ch1[50]; char ch2[50]; char ch3[50]; char * q1=ch1; char * q2=ch2; char * q3=ch3; printf("请输入三个字符串\n"); scanf("%s",ch1); scanf("%s",ch2); scanf("%s",ch3); printf("\n"); if(strcmp(ch1,ch2)>0) swap(q1,q2); if(strcmp(ch1,ch3)>0) swap(q1,q3); if(strcmp(ch2,ch3)>0) swap(q2,q3); printf("%s\n",ch1); printf("%s\n",ch2); printf("%s\n",ch3); return 0; }
[/quote]
struggle_007 2014-09-20
  • 打赏
  • 举报
回复
@Tianjipeng36 你按照你说的声明方法来 运行过吗? 我试了一下 不行!
Tianjipeng36 2014-09-20
  • 打赏
  • 举报
回复
关于swap函数为什么没有生效,是因为你只是把两个数组的首指针分别赋值给p1和p2,然后函数只是交换p1和p2的值,完全没有交换两个数组的首指针。如果要生效,应该这样声明:void swap(int* &p1, int* &p2); 这样p1和p2就是两个数组指针的引用了
  • 打赏
  • 举报
回复
解决了就好,代码模式显示,要用代码标签,发帖栏的上方,倒数第六个
引用 8 楼 struggle_007 的回复:
方法二,用到了strcpy函数,能成功~ 为啥把东西贴出来后都自动左对齐了??? #include<stdio.h> #include<string.h> #include<stdlib.h> void swap(char *p1,char *p2) { char temp[50]; strcpy(temp,p1); strcpy(p1,p2); strcpy(p2,temp); } int main(void) { char ch1[50]; char ch2[50]; char ch3[50]; char * q1=ch1; char * q2=ch2; char * q3=ch3; printf("请输入三个字符串\n"); scanf("%s",ch1); scanf("%s",ch2); scanf("%s",ch3); printf("\n"); if(strcmp(ch1,ch2)>0) swap(q1,q2); if(strcmp(ch1,ch3)>0) swap(q1,q3); if(strcmp(ch2,ch3)>0) swap(q2,q3); printf("%s\n",ch1); printf("%s\n",ch2); printf("%s\n",ch3); return 0; }
struggle_007 2014-09-17
  • 打赏
  • 举报
回复
谢谢 熊熊大叔的回答~~~初学者,问题比较多~~~
struggle_007 2014-09-17
  • 打赏
  • 举报
回复
p1=p2;都是指针变量也无法赋值吗?
赵4老师 2014-09-17
  • 打赏
  • 举报
回复
#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);

    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2
struggle_007 2014-09-17
  • 打赏
  • 举报
回复
方法二,用到了strcpy函数,能成功~ 为啥把东西贴出来后都自动左对齐了??? #include<stdio.h> #include<string.h> #include<stdlib.h> void swap(char *p1,char *p2) { char temp[50]; strcpy(temp,p1); strcpy(p1,p2); strcpy(p2,temp); } int main(void) { char ch1[50]; char ch2[50]; char ch3[50]; char * q1=ch1; char * q2=ch2; char * q3=ch3; printf("请输入三个字符串\n"); scanf("%s",ch1); scanf("%s",ch2); scanf("%s",ch3); printf("\n"); if(strcmp(ch1,ch2)>0) swap(q1,q2); if(strcmp(ch1,ch3)>0) swap(q1,q3); if(strcmp(ch2,ch3)>0) swap(q2,q3); printf("%s\n",ch1); printf("%s\n",ch2); printf("%s\n",ch3); return 0; }
struggle_007 2014-09-17
  • 打赏
  • 举报
回复
谢谢大家的回答~~~~ 方法一:用了冒泡法,其中也用到了交换地址。为什么之前在swap函数里不能生效??熊熊大叔~~~ #include<stdio.h> #include<string.h> int main(void) { char str1[100]; char str2[100]; char str3[100]; char str4[100]; char * p[4]; int i,j; p[0]=str1; p[1]=str2; p[2]=str3; p[3]=str4; char * q=NULL; for(i=0;i<4;i++) scanf("%s",p[i]); for(i=0;i<3;i++) for(j=i+1;j<4;j++) if(strcmp(p[i],p[j])>0) { q=p[i]; p[i]=p[j]; p[j]=q; } for(i=0;i<4;i++) printf("%s\n",p[i]); return 0; }
我看你有戏 2014-09-17
  • 打赏
  • 举报
回复
void swap(char* &p1,char* &p2) 指针引用试试
百曉生 2014-09-17
  • 打赏
  • 举报
回复
引用 2 楼 struggle_007 的回复:
p1=p2;都是指针变量也无法赋值吗?
这里的字符指针是用来表示字符串的,你可以看看这个——http://blog.csdn.net/u012421456/article/details/38645335
熊熊大叔 2014-09-16
  • 打赏
  • 举报
回复
swap根本没生效。字符串不能用等号赋值,要用strcpy

64,684

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧