写代码翻转一个C风格的字符串。(C风格的意思是”abcd”需要用5个字符来表示,包含末尾的 结束字符)
http://www.cricode.com/258.html
这道题如果就是要考察你有没有注意到C风格字符串最后的那个结束符,那我觉得还是像书 上写的那样,在代码中有所体现。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
void
swap
(
char
&
a
,
char
&
b
)
{
a
=
a
^
b
;
b
=
a
^
b
;
a
=
a
^
b
;
}
void
reverse1
(
char
*
s
)
{
if
(
!
s
)
return
;
char
*
p
=
s
,
*
q
=
s
;
while
(
*
q
)
++
q
;
--
q
;
while
(
p
<
q
)
swap
(
*
p
++
,
*
q
--
)
;
}
|
否则的话,可以直接获取字符串的长度,然后从两头开始一一交换相应的字符。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
void
swap
(
char
&
a
,
char
&
b
)
{
a
=
a
^
b
;
b
=
a
^
b
;
a
=
a
^
b
;
}
void
reverse2
(
char
*
s
)
{
int
n
=
strlen
(
s
)
;
for
(
int
i
=
0
;
i
<
n
/
2
;
++
i
)
swap
(
s
[
i
]
,
s
[
n
-
i
-
1
]
)
;
}
|
完整代码如下:
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
|
#include <iostream>
#include <cstring>
using
namespace
std
;
void
swap
(
char
&
a
,
char
&
b
)
{
a
=
a
^
b
;
b
=
a
^
b
;
a
=
a
^
b
;
}
void
reverse2
(
char
*
s
)
{
int
n
=
strlen
(
s
)
;
for
(
int
i
=
0
;
i
<
n
/
2
;
++
i
)
swap
(
s
[
i
]
,
s
[
n
-
i
-
1
]
)
;
}
void
reverse1
(
char
*
s
)
{
if
(
!
s
)
return
;
char
*
p
=
s
,
*
q
=
s
;
while
(
*
q
)
++
q
;
--
q
;
while
(
p
<
q
)
swap
(
*
p
++
,
*
q
--
)
;
}
int
main
(
)
{
char
s
[
]
=
"1234567890"
;
reverse1
(
s
)
;
cout
<<
s
<<
endl
;
return
0
;
}
|
【参考代码】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
void
reverse
(
char
*
str
)
{
char
*
end
=
str
;
char
tmp
;
if
(
str
)
{
while
(
*
end
)
{
++
end
;
}
--
end
;
while
(
str
<
end
)
{
tmp
=
*
str
;
*
str
++
=
*
end
;
*
end
--
=
tmp
;
}
}
}
|