利用指针,编写一个函数,让三个字符串从小到大排序,我这样有什么问题?

#include<iostream>#include<string>usingnamespacestd;intmain(){voidsort(char*,char*,ch... #include <iostream>
#include <string>
using namespace std;

int main()
{void sort(char*,char*,char*);
char s1[255],s2[255],s3[255];
char *p1,*p2,*p3;
cin>>s1>>s2>>s3;
p1=s1;p2=s2;p3=s3;
sort(p1,p2,p3);
cout<<s1<<endl<<s2<<endl<<s3<<endl;
}
void sort(char*p1,char*p2,char*p3)
{ char *r;
if(p1<p2){r=p2;p2=p1;p1=r;}
if(p1<p3){r=p3;p3=p1;p1=r;}
if(p2<p3){r=p3;p3=p2;p2=r;}
}
对于数组和指针有点不太了解,希望能讲解一下!感谢
展开
 我来答
White_MouseYBZ
2019-12-18 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6650万
展开全部
  1. 代码没有用C++的string类,操作目标还是C的char 型数组,所以不能用>和<来判断字符串的大小,要用库函数strcmp比较两个字符串的大小。

  2. 拷贝到sort函数中的指针只是实参指针的“值”,所以在函数中改变那些指针的值在函数中有用,效果返回不到主函数中去,就是说在sort中输出结果是有效的,在主函数中字符串的大小还是原样子,不会有排序结果。这问题用3个办法解决:一是就按目前结构写sort,在sort中输出比较结果;二是在sort中通过指针直接交换主函数中的数组内容;三是有网友提出的用二级指针来交换主函数中的指针。

  3. 如果用C++的string类,那就十分简单了,操作字符串就像操作普通变量一样。

下面提供一个拷贝数组内容的代码供参考,并可续问。

代码文本:

//#include "stdafx.h"//vc++ 6.0? Maybe should add this line.

#include <string>

#include <iostream>

using namespace std;

int main(int argc,char *argv[]){

void sort(char*,char*,char*);

char s1[255],s2[255],s3[255];

//char *p1,*p2,*p3;

cout << "Enter the 3 strings(Separated by ' ')...\n";

cin>>s1>>s2>>s3;

//p1=s1;p2=s2;p3=s3;

sort(s1,s2,s3);

cout << "After the sorting:\n";

cout<<s1<<endl<<s2<<endl<<s3<<endl;

return 0;

}

void sort(char *p1,char *p2,char *p3){ 

char r[255],t;

if((t=strcmp(p1,p2))>0)

strcpy(r,p1),strcpy(p1,p2),strcpy(p2,r);

if((t=strcmp(p1,p3))>0)

strcpy(r,p1),strcpy(p1,p3),strcpy(p3,r);

if((t=strcmp(p2,p3))>0)

strcpy(r,p2),strcpy(p2,p3),strcpy(p3,r);

}

追问
谢谢!我看懂了,我这个主要问题就是没有用strcmp,><不能比较字符串数组。如果是string类,不用写sort直接比较就可以。然后您的第二点是个什么意思,能讲解一下吗?"在sort中通过指针直接交换主函数中的数组内容",我感觉我学数组和指针学得稀里糊涂。。
追答
这个回答代码就是“直接交换内容的”,如strcpy(r,p1),strcpy(p1,p3),strcpy(p3,r);这一句就是把p1为首地址的数组的内容与p3为首地址的内容交换。
听不清啊
高粉答主

2019-12-18 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
C语言中函数的参量的传递,是单向的。所以,要实现排序,就必须通过指针实现(指向字符串首地址的指针,即二级指针)。
#include<iostream>
#include<cstring>
using namespace std;
int main()
{ void sort(char**,char**,char**);
char s1[255],s2[255],s3[255];
char*p1,*p2,*p3;
cin>>s1>>s2>>s3;
p1=s1;
p2=s2;
p3=s3;
sort(&p1,&p2,&p3);
cout<<p1<<endl<<p2<<endl<<p3<<endl;
}
void sort(char**p1,char**p2,char**p3)
{ char*r;
if(strcmp(*p1,*p2)>0)
{ r=*p2;
*p2=*p1;
*p1=r;
}
if(strcmp(*p1,*p3)>0)
{ r=*p3;
*p3=*p1;
*p1=r;
}
if(strcmp(*p2,*p3)>0)
{ r=*p3;
*p3=*p2;
*p2=r;
}
}
更多追问追答
追问
您好!这里不需要用到二级指针吧(虽然我也不太懂),请帮我看下这里,为什么实参是数组,形参可以是指针?

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-12-18
展开全部
初步看了一下
字符串比较不能 直接 p1<p2 用 strcmp 函数

多参考网络上例程
追问

可以吧?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式