A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sl7s78s8 中级黑马   /  2014-7-23 22:05  /  1555 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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";

5 个回复

倒序浏览
while(head++ <= end--)你先加了head、减了end,就导致m和y没有交换,实际上是从e和m开始交换的。while条件就老老实实head < end吧,自增自减放到循环体内、交换完成之后再做
回复 使用道具 举报
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
回复 使用道具 举报
我把你的修改的,你自己看下
  1. void  changeChar(char *p, int lenth)
  2. {     char *head = p;//记录首地址;
  3.     char *end = p + lenth - 1;//最后字符地址;
  4.     while( head<= end--) /* 错在这里,head++ 虽然这行不会变,可这行过后head就+1了,也就跑到第2个位置与后面的交换了,所以要把head移到后面*/    {
  5.         
  6.         char temp = *head;
  7.         *head = *end;
  8.         *end  =  temp;
  9.         head++;  //在转换完后在+1,还有就是要注意sizeof(),与strlen()的区别
  10.         
  11.         
  12.         
  13.     }
  14. }
  15. int main( )
  16. {
  17.     char name[] = "myname";
  18.      int lenth = sizeof(name);
  19.     changeChar(name,lenth);
  20.     printf("%s\n",name);
  21.     return 0;
  22. }
复制代码
回复 使用道具 举报
道本真 发表于 2014-7-24 07:58
我把你的修改的,你自己看下

搞定了,谢谢了
回复 使用道具 举报

确实要放循环体内
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马