利用指针,编写一个函数,让三个字符串从小到大排序,我这样有什么问题?
#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;}
}
对于数组和指针有点不太了解,希望能讲解一下!感谢 展开
代码没有用C++的string类,操作目标还是C的char 型数组,所以不能用>和<来判断字符串的大小,要用库函数strcmp比较两个字符串的大小。
拷贝到sort函数中的指针只是实参指针的“值”,所以在函数中改变那些指针的值在函数中有用,效果返回不到主函数中去,就是说在sort中输出结果是有效的,在主函数中字符串的大小还是原样子,不会有排序结果。这问题用3个办法解决:一是就按目前结构写sort,在sort中输出比较结果;二是在sort中通过指针直接交换主函数中的数组内容;三是有网友提出的用二级指针来交换主函数中的指针。
如果用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为首地址的内容交换。
#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