黑马程序员技术交流社区
标题:
一个strrev函数,看不懂,求高手说一下思路
[打印本页]
作者:
3677065
时间:
2014-8-14 22:32
标题:
一个strrev函数,看不懂,求高手说一下思路
char *strrev(char *str)
{
if(str==NULL)
return NULL;
char *start=str;
char *end=str+strlen(str)-1;
char temp;
while(start<end)
{
temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
return str;
}
作者:
qq541955920
时间:
2014-8-14 23:10
char *strrev(char *str)
{
if(str==NULL)
return NULL; //这个传入的参数是空返回空,这个函数到这里就结束了
char *start=str; //把传入参数的首地址给 start(开始)
char *end=str+strlen(str)-1; //把传入参数的尾地址给 end(结束),strlen函数返回的长度不包括\0
如:传如abcd 那尾地址就是a+3,所以strlen返回是4要减1.
char temp; //交换值要先声明一个同类型的变量,如果直接赋值0就更好了。
while(start<end)
{
temp=*start; //两个值互换 end最后一个字符串的值换到了第一个。
*start=*end;
*end=temp;
start++; //换完一次就要移到下一个地址
end--; //同上
}
return str; //这个返回的是传入字符串倒序的。如:abcd 返回dcba;
}
我是这么理解的 如果不对请大神说明。。。谢谢
作者:
qq541955920
时间:
2014-8-14 23:12
错了。。上面char temp 不用赋0. 当成int型了。。。
作者:
cjfire
时间:
2014-8-14 23:22
通过这个图,我们看到,程序定义了两个指针,分别指向传入字符串的开头和结尾。然后看while循环体里面,将头尾进行了置换,然后头指针向尾部挪动一下,尾指针向头部挪动一下,而while的成立条件是,头指针和尾指针没有相遇。
解释.png
(54.6 KB, 下载次数: 25)
下载附件
2014-8-14 23:19 上传
作者:
★彬★卍囧神
时间:
2014-8-15 12:58
应该是字符串后面的字符提到前面,前面放后面?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2