OnTheWay2012
埋葬昨天的我,迎来重生的我!
C++博客
首页
新文章
新随笔
聚合
管理
posts - 15, comments - 89, trackbacks - 0
反转字符串
大家在面试的时候或者在网络上经常会看到让写一个字符串反转的函数的这种题。
以下是我自己写的字符串反转的函数,恳请各位指教。
char *Reverse_1(char *str)和char *Reverse_2(char *str) 实现的功能是把字符串反转,例如把helloworld反转为dlrowolleh。
char *Reverse_3(char *str)实现把this is a string反转为string is a this的功能。
1
#include
<
iostream
>
2
#include
<
assert.h
>
3
4
using
namespace
std;
5
6
char
*
Reverse_1(
char
*
str)
7
{
8
assert(NULL
!=
str);
9
10
size_t size
=
strlen(str);
11
if
(NULL
!=
str
&&
1
<
size)
12
{
13
for
(size_t i
=
0
; i
<
size
/
2
; i
++
)
14
{
15
char
ch
=
str[i];
16
str[i]
=
str[size
-
i
-
1
];
17
str[size
-
i
-
1
]
=
ch;
18
}
19
}
20
21
return
str;
22
}
23
24
/**/
////////////////////////////////////////////////////////////////////////
//
25
26
char
*
Reverse_2(
char
*
str)
27
{
28
assert(NULL
!=
str);
29
30
char
*
res
=
str;
31
32
size_t size
=
strlen(str);
33
if
(NULL
!=
str
&&
1
<
size)
34
{
35
char
*
pEnd
=
str
+
size
-
1
;
36
37
if
(
0
==
size
%
2
)
38
{
39
do
40
{
41
char
ch
=
*
str;
42
*
str
=
*
pEnd;
43
*
pEnd
=
ch;
44
}
while
(
++
str
!=
pEnd
--
);
45
}
46
else
47
{
48
do
49
{
50
char
ch
=
*
str;
51
*
str
=
*
pEnd;
52
*
pEnd
=
ch;
53
}
while
(
++
str
!=
--
pEnd);
54
}
55
}
56
57
return
res;
58
}
59
60
/**/
////////////////////////////////////////////////////////////////////////
//
61
////////////////////////////////////////////////////////////////////////
//
62
63
char
*
Reverse_3_1(
char
*
str, size_t size)
64
{
65
assert(NULL
!=
str);
66
67
if
(NULL
!=
str
&&
1
<
size)
68
{
69
for
(size_t i
=
0
; i
<
size
/
2
; i
++
)
70
{
71
char
ch
=
str[i];
72
str[i]
=
str[size
-
i
-
1
];
73
str[size
-
i
-
1
]
=
ch;
74
}
75
}
76
77
return
str;
78
}
79
80
char
*
Reverse_3(
char
*
str)
81
{
82
assert(NULL
!=
str);
83
84
char
*
res
=
str;
85
if
(NULL
!=
str
&&
NULL
!=
strchr(str,
'
'
))
//
这里的strchr是为了防止出现bug(例如:abc被修改为cba)
86
{
87
str
=
Reverse_3_1(str, strlen(str));
88
while
(
true
)
89
{
90
char
*
pSubStr
=
strchr(str,
'
'
);
91
if
(NULL
==
pSubStr)
92
{
93
Reverse_3_1(str, strlen(str));
94
break
;
95
}
96
else
97
{
98
Reverse_3_1(str, pSubStr
-
str);
99
str
=
pSubStr
+
1
;
100
}
101
}
102
}
103
104
return
res;
105
}
106
107
void
main()
108
{
109
/**/
/*
110
以下代码用来测试Reverse_1和Reverse_2
111
char chArr1[] = "";
112
cout<<Reverse_2(chArr1)<<endl;
113
114
char chArr2[] = "HelloWorld";
115
cout<<Reverse_2(chArr2)<<endl;
116
117
char chArr3[] = "Hello World";
118
cout<<Reverse_2(chArr3)<<endl;
119
120
char chArr4[] = "JiShuGe";
121
cout<<Reverse_2(chArr4)<<endl;
122
123
char chArr5[] = "OuShuGee";
124
cout<<Reverse_2(chArr5)<<endl;
125
126
char chArr6[] = "ab";
127
cout<<Reverse_2(chArr6)<<endl;
128
129
char chArr7[] = "abc";
130
cout<<Reverse_2(chArr7)<<endl;
131
*/
132
133
char
chArr1[]
=
""
;
134
cout
<<
Reverse_3(chArr1)
<<
endl;
135
136
char
chArr2[]
=
"
HelloWorld
"
;
137
cout
<<
Reverse_3(chArr2)
<<
endl;
138
139
char
chArr3[]
=
"
Hello World
"
;
140
cout
<<
Reverse_3(chArr3)
<<
endl;
141
142
char
chArr4[]
=
"
Ji Shu Ge
"
;
143
cout
<<
Reverse_3(chArr4)
<<
endl;
144
145
char
chArr5[]
=
"
This is a string
"
;
146
cout
<<
Reverse_3(chArr5)
<<
endl;
147
148
char
chArr6[]
=
"
HelloWorld
"
;
149
cout
<<
Reverse_3(chArr6)
<<
endl;
150
151
char
chArr7[]
=
"
HelloWorld
"
;
152
cout
<<
Reverse_3(chArr7)
<<
endl;
153
154
char
chArr8[]
=
"
Hello World
"
;
155
cout
<<
Reverse_3(chArr8)
<<
endl;
156
157
char
chArr9[]
=
"
He llo Wor ld
"
;
158
cout
<<
Reverse_3(chArr9)
<<
endl;
159
}
posted on 2010-05-08 17:21
OnTheWay
阅读(357)
评论(1)
编辑
收藏
引用
所属分类:
算法
FeedBack:
#
re: 反转字符串
2010-05-08 17:45 |
小时候可靓了
就这样一点点写下去,就会很厉害。。。中间不要间断
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
给定一个字符串,求其所有可能组合
写了两个函数(1)把一个unsigned int 转换成字符型的IP(2)链表插入元素,升序
反转字符串
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2010年5月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
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
31
1
2
3
4
5
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
C、C++(2)
操作系统(Windows、Linux、Unix)
读书笔记
个人感悟(4)
面经 (4)
软件设计(1)
数据库
算法(3)
线程、进程
英语
杂项
转载
随笔档案
2011年1月 (1)
2010年12月 (2)
2010年11月 (1)
2010年6月 (1)
2010年5月 (6)
2010年4月 (1)
2010年3月 (3)
友情连接
搜索
最新评论
1. re: 对“随笔”所写的一篇文章《链表实验》的一点看法
评论内容较长,点击标题查看
--陈梓瀚(vczh)
2. re: 对“随笔”所写的一篇文章《链表实验》的一点看法
谢谢咯,呵呵。我喜欢这代码风格,向你学习
--あ维wêiセ
3. re: 一种基于引用计数机制的智能指针实现
把A *p = new A();这句换成A p;不行吗?
--叫我老王吧
4. re: 一种基于引用计数机制的智能指针实现
Boost 里面有,在C++ TR1 里面也已经有这种指针(就是来自Boost)
--Phuehvk
5. re: 一种基于引用计数机制的智能指针实现[未登录]
比较讨厌这种引用计数指针的使用,一旦使用就意味这在所有的函数参数中必须使用指针引用或者值拷贝,一旦某些函数要求用裸指针,就可能引发问题。
--hdqqq
阅读排行榜
1. 一道面试题(求一个unsigned int 数的二进制表示中有多少个1?)(6139)
2. 一种线程安全的单例模式实现方式(5724)
3. 一种基于引用计数机制的智能指针实现(2891)
4. 不要把类的外衣脱下来,让类的美丽消失于无形(2764)
5. 几道面试题,有的做出来了,有的不会做,请大家指教(2597)
评论排行榜
1. 一道面试题(求一个unsigned int 数的二进制表示中有多少个1?)(15)
2. 一种线程安全的单例模式实现方式(15)
3. 几道面试题,有的做出来了,有的不会做,请大家指教(14)
4. 令人气愤的现象(13)
5. 不要把类的外衣脱下来,让类的美丽消失于无形(9)