XY
没有任何借口
posts - 9, comments - 31, trackbacks - 0, articles - 0
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
反转字符串
Posted on 2008-06-04 16:22
路缘
阅读(9769)
评论(2)
编辑
收藏
引用
所属分类:
C/C++
题目:
编写函数reverse_string,它的原型如下:
void reverse_string(char *str);
函数把参数字符串中的字符串反向排列。请使用指针而不是数组下标,不要使用任何C函数库中用于操纵字符串的函数。提示:不要声明一个局部数组来临时存储参数字符串。
算法:
关于反转字符串的方法很多。这里我给出我想到的一种算法。
/**/
/*
***********反转字符串***********
*/
void
reverse_str(
char
*
str)
{
char
*
cp
=
str;
int
i
=
0
;
while
(
*
str
!=
'
\0
'
)
{
str
++
;
i
++
;
}
i
/=
2
;
str
--
;
while
(i
--
>
0
)
{
*
str
^=
*
cp;
*
cp
^=
*
str;
*
str
^=
*
cp;
str
--
;
cp
++
;
}
}
说明:
算法中运用了:
a ^ a = 0 和 a ^ 0 = a
的特性。以此来进行变量值的交换,可以避免使用额外的临时变量。
Feedback
#
re: 反转字符串
回复
更多评论
2012-11-15 22:28 by
周翀
三次异或可以互换两个值,也可以毁掉两个值,当它们相等的时候……
#
re: 反转字符串
回复
更多评论
2017-09-29 22:46 by
路缘
@周翀
刚一看,吓我一跳,以为一直认为的解法有问题。细想一下,值相等也无妨。当毁掉其中一个值后,再做异或,另一个值就会得到保留,做第3次计算,毁掉的那个值也被恢复了,所以没有问题。
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
算法:快速排序之python实现
算法:找出n个数中重复最多的10个数
反转字符串
删除字符串中的子串
得到字符串S1中第一个且是字符串S2中的位置指针
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 路缘
日历
<
2008年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
(9)
C/C++(5)
计算机图形学(1)
数字图像
网络通信
系统体系(2)
移动开发(1)
随笔档案
(9)
2017年9月 (2)
2008年10月 (2)
2008年9月 (1)
2008年7月 (1)
2008年6月 (3)
博客
本人博客园的博客
搜索
积分与排名
积分 - 35919
排名 - 572
最新评论
1. re: 反转字符串
@周翀
刚一看,吓我一跳,以为一直认为的解法有问题。细想一下,值相等也无妨。当毁掉其中一个值后,再做异或,另一个值就会得到保留,做第3次计算,毁掉的那个值也被恢复了,所以没有问题。
--路缘
2. re: 反转字符串
三次异或可以互换两个值,也可以毁掉两个值,当它们相等的时候……
--周翀
3. re: 深入理解计算机系统1_程序是如何运行的
抄袭
--图—图—
4. re: 删除字符串中的子串
ssize_t是什么类型?
--sb
5. re: 删除字符串中的子串
看错了~~sorry
--ff
阅读排行榜
1. 反转字符串(9769)
2. 深入理解计算机系统1_程序是如何运行的(7940)
3. 删除字符串中的子串(6606)
4. 分形的乐趣之_Hilbert曲线(2091)
5. 深入理解计算机系统2_信息存储(2060)
评论排行榜
1. 删除字符串中的子串(14)
2. 深入理解计算机系统1_程序是如何运行的(12)
3. 反转字符串(2)
4. 分形的乐趣之_Hilbert曲线(2)
5. symbian应用程序开发1(1)