如何利用指针实现两个字符串串变量的交换?

wang20726 2007-03-22 08:42:05
如何使用引用参数来实现两个字符串变量的交换。
例如:
char *ap="hello";
char *bp="how are you";
交换后使ap和bp指向的内容分别是:
ap: "how are you"
bp: "hello"

请大家帮帮看看??
...全文
2539 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
ytfhwfnh 2007-03-26
  • 打赏
  • 举报
回复
因为前面的运算符是-=后面的运算符是=
地址可以加减一个整数,但不能直接将整数赋给它
jiangchyan 2007-03-26
  • 打赏
  • 举报
回复
为什么前面那个ap只能接受一个int型的返回值,而后面那个ap只能接受一个char*型的返回值?
jiangchyan 2007-03-26
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;
int main()
{
char *ap="hello";
char *bp="how are you";
ap -= (int)bp;
bp += (int)ap;
ap = (char*)(bp - ap);
cout << ap << endl;
cout << bp << endl;
system("pause");
return 0;
}
借问蓝色心情,我是一个C++菜鸟,你的程序我调试了一下,但是有点不明白的地方,为什么前面那个ap可以接受一个int型的返回值,而后面那个只能接受一个char*的返回值呢?谢谢!
jannet262 2007-03-26
  • 打赏
  • 举报
回复
下面这样不就行了吗?我什么也没有改,只不过改变了传的参数:
swap((char * &)a,(char * &)b);


/*程序如下*/
void swap(char*& x, char*& y)
{
char *t = x;
x = y;
y = t;
}

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

char a[20],b[20];
cout<<"请输入ap的值:";
cin>>a;
cout<<"请输入bp的值:";
cin>>b;

cout<<"你输入的ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;
swap((char * &)a,(char * &)b);
cout<<"交换后ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;

return 0;
}
jiangchyan 2007-03-26
  • 打赏
  • 举报
回复
嗯,谢谢蓝色心情
huangruiye 2007-03-25
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;
void swap(char *****x, char *****y)
{
char *****t = x;
x = y;
y = t;
}

void main()
{
char a[20],b[20];
cout<<"请输入ap的值:";
cin>>a;
cout<<"请输入bp的值:";
cin>>b;
char *ap=a,*bp=b;
cout<<"你输入的ap值是:"<<ap<<'\t'<<"bp的值是:"<<bp<<endl;
swap(ap,bp);
cout<<"交换后ap值是:"<<ap<<'\t'<<"bp的值是:"<<bp<<endl;
}
ytfhwfnh 2007-03-25
  • 打赏
  • 举报
回复
怎么感谢我们……这么多人分1分
>_<
zxlyjb 2007-03-23
  • 打赏
  • 举报
回复
这样就可以了:
(如果嫌swap不灵活,可以在swap里面加入strlen(ap)与strlen(bp)的最大值,然后在定义数组)

#include <stdio.h>
#include <iostream.h>
#include <string.h>

void Swap(char *ap, char *bp)
{
if ((NULL==ap) ||(NULL==bp))
{
return;
}

char temp[20];
strcpy(temp, (const char*)ap);
strcpy(ap, (const char*)bp);
strcpy(bp, (const char*)temp);
}

void main()
{
char a[20],b[20];
cout<<"请输入ap的值:";
cin>>a;
cout<<"请输入bp的值:";
cin>>b;
char *ap=a,*bp=b;
cout<<"你输入的ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;
Swap(ap,bp);
cout<<"交换后ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;
}


wang20726 2007-03-23
  • 打赏
  • 举报
回复
哪还有没 有更简单的 方法呢?
对于这个算法,我去网上找了,都很少,你能详细讲一下这个算法 swap_ranges的意思吗?
谢谢
wang20726 2007-03-23
  • 打赏
  • 举报
回复
真是太谢谢你们了,通过这道题目,我没有想到会有那么多种的方法解决呀!!
taodm 2007-03-23
  • 打赏
  • 举报
回复
楼主,你恐怕原始需求理解错了。
char *a="hello";
char *b="how are you";
char *ap=a,*bp=b;
cout<<"ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;
Swap(ap,bp);
cout<<"交换后ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;
则神仙也没招的了。
john_kuo 2007-03-23
  • 打赏
  • 举报
回复
俺也来说一个(通过测试的):

void swapStr(char** a,char** b)
{
char *temp;
temp=*a;
*a=*b;
*b=temp;
}
Piao_Polar 2007-03-23
  • 打赏
  • 举报
回复
void Swap(char *x, char *y)
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
char *tmp = new char[(strlen(x) > strlen(y) ? strlen(x) : strlen(y)) + 1];
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

strcpy(tmp, x);
strcpy(x, y);
strcpy(y, tmp);
delete[] tmp;
}

也可以这样,虽然土了点~~~
ytfhwfnh 2007-03-22
  • 打赏
  • 举报
回复
void Swap(char* x, char* y)
{
if (strlen(y) > strlen(x)) // 如果字符串y比较长的话……
{
char *t = x; x = y; y = t; // 交换两个指针
} // 因此x总是指向比较长的那个
swap_ranges(x, x + strlen(x) + 1, y); // STL算法,交换两个区间的元素内容……
}
Lstyk 2007-03-22
  • 打赏
  • 举报
回复
#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;

void swap(char * &a,char * &b)
{
char *tmp;
tmp=a;
a=b;
b=tmp;
}

int main()
{
string ap,bp;
cout<<"Iput 2 strings: "<<endl;
cin>>ap>>bp;
swap(ap,bp);
cout<<ap<<endl<<bp<<endl;
system("pause");
return 0;
}
wang20726 2007-03-22
  • 打赏
  • 举报
回复
谢谢,真是太谢谢你了!
这样行是行,不过你用到的这个函数swap_ranges不知道是什么意思,你能不能大概讲一下你的原理呀!!
ytfhwfnh 2007-03-22
  • 打赏
  • 举报
回复
他要交换的是两个字符串的位置,而不是指针……
#include <iostream>
#include <algorithm>

using namespace std;
void Swap(char* x, char* y)
{
if (strlen(y) > strlen(x))
{
char *t = x;
x = y;
y = t;
}
swap_ranges(x, x + strlen(x) + 1, y);
}

int main()
{
char a[20],b[20];
cout<<"请输入ap的值:";
cin>>a;
cout<<"请输入bp的值:";
cin>>b;
char *ap=a,*bp=b;
cout<<"你输入的ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;
Swap(ap,bp);
cout<<"交换后ap值是:"<<a<<'\t'<<"bp的值是:"<<b<<endl;
system("pause");
return 0;
}
wang20726 2007-03-22
  • 打赏
  • 举报
回复
谢谢楼上的高手参与,但是用这种法也不行哦,运行结果就好像没用调用函数一样哦
你看一下运行结果:

请输入ap的值:234234
请输入bp的值:fasdfaf
你输入的ap值是:234234 bp的值是:fasdfaf
交换后ap值是:234234 bp的值是:fasdfaf
xlbdan 2007-03-22
  • 打赏
  • 举报
回复
void Swap(char *&ap,char *&bp) //对实参中指针的引用
{
char *p=ap; //交换两指针
ap=bp;
bp=p;
}
wang20726 2007-03-22
  • 打赏
  • 举报
回复
ytfhwfnh(蓝色心情) 你说错了,我不是这个意思,我就是利用字符串,然后再利用指针交换,最后把它输出来呀!!
就像下面这个一样:

请输入ap的值:abcdefg
请输入bp的值:1234
你输入的ap值是:abcdefg bp的值是:1234
交换后ap值是:1234 bp的值是:abcdefg
Press any key to continue
加载更多回复(5)

64,282

社区成员

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

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