黑马程序员技术交流社区
标题:
将字符颠倒
[打印本页]
作者:
sl7s78s8
时间:
2014-7-23 22:05
标题:
将字符颠倒
本帖最后由 sl7s78s8 于 2014-7-24 21:11 编辑
void changeChar(char *p,int lenth)
{ char *head = p;//记录首地址;
char *end = p + lenth - 1;//最后字符地址;
while(head++ <= end--)
{
char temp = *head;
*head = *end;
*end = temp; //交换前后字符;
}
}
int main( )
{
char name[] = "myname";
int lenth = sizeof(name);
changeChar(name,lenth);
printf("%s\n",name);
}
这字符串变换后,最后输出的是"menamy";
求知道错在那,怎么不是"ymanem";
作者:
fantacyleo
时间:
2014-7-23 22:46
while(head++ <= end--)你先加了head、减了end,就导致m和y没有交换,实际上是从e和m开始交换的。while条件就老老实实head < end吧,自增自减放到循环体内、交换完成之后再做
作者:
这个夏天的芬芳
时间:
2014-7-23 23:43
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
作者:
道本真
时间:
2014-7-24 07:58
我把你的修改的,你自己看下
void changeChar(char *p, int lenth)
{ char *head = p;//记录首地址;
char *end = p + lenth - 1;//最后字符地址;
while( head<= end--) /* 错在这里,head++ 虽然这行不会变,可这行过后head就+1了,也就跑到第2个位置与后面的交换了,所以要把head移到后面*/ {
char temp = *head;
*head = *end;
*end = temp;
head++; //在转换完后在+1,还有就是要注意sizeof(),与strlen()的区别
}
}
int main( )
{
char name[] = "myname";
int lenth = sizeof(name);
changeChar(name,lenth);
printf("%s\n",name);
return 0;
}
复制代码
作者:
sl7s78s8
时间:
2014-7-24 21:08
道本真 发表于 2014-7-24 07:58
我把你的修改的,你自己看下
搞定了,谢谢了
作者:
sl7s78s8
时间:
2014-7-24 21:09
fantacyleo 发表于 2014-7-23 22:46
while(head++
确实要放循环体内
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2