⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_48957.htm

📁 vc
💻 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(&amp;a,&amp;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* &amp; s1,char* &amp; s2) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char* temp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;temp=s1; <BR>&nbsp;&nbsp;&nbsp;&nbsp;s1=s2; <BR>&nbsp;&nbsp;&nbsp;&nbsp;s2=temp; <BR>} <BR>int main(int argc, char* argv[])<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char *a,*b; <BR>&nbsp;&nbsp;&nbsp;&nbsp;a="10"; <BR>&nbsp;&nbsp;&nbsp;&nbsp;b="20"; <BR>&nbsp;&nbsp;&nbsp;&nbsp;swap2(a,b); <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;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 *&amp;,char *&amp;),方便把s1,s2的地址和空间完全重新指定<BR><BR>还有,用char a[]="xxx"之类的字符串是固定了首地址的无法使用delete a或free(a)来重新分配,不过char *a="xxx"(这是赋初值,而不是赋值)的就可以<BR><BR>当然,许多东西是要自己错过才会注意到的,我一开始也是这样的,而且错了许多种情况才明白的<BR>*/<BR><BR>#include&lt;stdio.h&gt;<BR>#include&lt;string.h&gt;<BR>char *a,*b;<BR><BR>void swap(char *&amp;s1,char *&amp;s2)<BR>{<BR>&nbsp;&nbsp;char *olds1,*olds2;<BR>&nbsp;&nbsp;int len1,len2;<BR><BR>&nbsp;&nbsp;len1=strlen(s1);<BR>&nbsp;&nbsp;len2=strlen(s2);<BR>&nbsp;&nbsp;olds1=new char[len1+1]; strcpy(olds1,s1);<BR>&nbsp;&nbsp;olds2=new char[len2+1]; strcpy(olds2,s2);<BR>&nbsp;&nbsp;delete s1; s1=new char[len2+1];<BR>&nbsp;&nbsp;delete s2; s2=new char[len1+1];<BR>&nbsp;&nbsp;strcpy(s1,olds2);<BR>&nbsp;&nbsp;strcpy(s2,olds1);<BR>&nbsp;&nbsp;delete olds1;<BR>&nbsp;&nbsp;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>&nbsp;&nbsp;temp=*s1; <BR>&nbsp;&nbsp;*s1=*s2; <BR>&nbsp;&nbsp;*s2=temp; <BR>} <BR>void main() <BR>{<BR>&nbsp;&nbsp;char a,b;<BR>&nbsp;&nbsp;a=10;<BR>&nbsp;&nbsp;b=20;<BR>&nbsp;&nbsp;swap2(&amp;a,&amp;b); <BR>&nbsp;&nbsp;printf("%d\n",a);<BR>&nbsp;&nbsp;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 + -