📄 subject_48957.htm
字号:
<p>
序号:48957 发表者:wxw17391 发表日期:2003-08-05 15:00:32
<br>主题:如何修改才能使两个串交换?
<br>内容:void swap2(char *s1,char *s2) <BR>{ int temp; <BR>temp=*s1; <BR>*s1=*s2; <BR>*s2=temp; <BR>} <BR>main() <BR>{ char *a,*b; <BR>a="10"; <BR>b="20"; <BR>swap2(a,b); <BR>// swap2(&a,&b); <BR>//如何修改才能使两个交换?改成下面传地址的方式也不行 <BR>} <BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:张志民 回复日期:2003-08-05 17:31:01
<br>内容:void swap2(char* & s1,char* & s2) <BR>{<BR> char* temp; <BR> temp=s1; <BR> s1=s2; <BR> s2=temp; <BR>} <BR>int main(int argc, char* argv[])<BR>{<BR> char *a,*b; <BR> a="10"; <BR> b="20"; <BR> swap2(a,b); <BR><BR> return 0;<BR>}<BR><BR>改称这样就可以了!你试一下
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:大橡胶 回复日期:2003-08-07 02:03:08
<br>内容:如果是要按你本意的话下面这个简单程序的可作参考,应该容易看懂的(对beginner来说千万别看漏一句哦,不然就不明白程序的意思呀)<BR>/*<BR>天啊,*s1和*s2只表示字符串s1,s2的第一只字符啊<BR>*s1=*s2应改成strcpy(s1,s2);<BR>但是s1的空间不一定满足s2的要求,而用s1=(char*)realloc(s1,strlen(s2))且如果s1和s2在内存空间“靠”得近的话这个语句会造成空间重叠,所以swap(char*,char*)是不可取的,应为swap(char *&,char *&),方便把s1,s2的地址和空间完全重新指定<BR><BR>还有,用char a[]="xxx"之类的字符串是固定了首地址的无法使用delete a或free(a)来重新分配,不过char *a="xxx"(这是赋初值,而不是赋值)的就可以<BR><BR>当然,许多东西是要自己错过才会注意到的,我一开始也是这样的,而且错了许多种情况才明白的<BR>*/<BR><BR>#include<stdio.h><BR>#include<string.h><BR>char *a,*b;<BR><BR>void swap(char *&s1,char *&s2)<BR>{<BR> char *olds1,*olds2;<BR> int len1,len2;<BR><BR> len1=strlen(s1);<BR> len2=strlen(s2);<BR> olds1=new char[len1+1]; strcpy(olds1,s1);<BR> olds2=new char[len2+1]; strcpy(olds2,s2);<BR> delete s1; s1=new char[len2+1];<BR> delete s2; s2=new char[len1+1];<BR> strcpy(s1,olds2);<BR> strcpy(s2,olds1);<BR> delete olds1;<BR> delete olds2;<BR>}<BR><BR>void main()<BR>{<BR> a=new char[6];<BR> b=new char[4];<BR> strcpy(a,"aaaaa");<BR> strcpy(b,"bbb");<BR> printf("\n%s\n%s\n",a,b);<BR> swap(a,b);<BR> printf("\n%s\n%s\n",a,b);<BR> delete a;<BR> delete b;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凌仕晓 回复日期:2003-08-07 10:07:48
<br>内容:void swap2(char *s1,char *s2) <BR>{ char *temp; <BR>temp=s1; <BR>s1=s2; <BR>s2=temp; <BR>} <BR>main() <BR>{ char *a,*b; <BR>a="10"; <BR>b="20"; <BR>swap2(a,b); <BR>} <BR><BR>这样不会有问题;<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:风之文章 回复日期:2003-08-07 11:12:13
<br>内容:void swap2(char *s1,char *s2) <BR>{ char temp; <BR> temp=*s1; <BR> *s1=*s2; <BR> *s2=temp; <BR>} <BR>void main() <BR>{<BR> char a,b;<BR> a=10;<BR> b=20;<BR> swap2(&a,&b); <BR> printf("%d\n",a);<BR> printf("%d\n",b);<BR><BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:大橡胶 回复日期:2003-08-07 14:11:19
<br>内容:3楼的不能在BC,VC通过printf,cout等语句的测试,这是因为swap(char *s1,char *s2)的参数是把指针a,b地址复制一份给s1,s2调用也就是说,在函数内部只改变s1,s2的地址而不改变其内容是没法达到交换的目的<BR><BR>4楼的同志是开开玩笑的吧<BR><BR>不想用我在2楼的方法就用1楼的吧,不过我的程序多少也有点点参考价值吧?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -