以下是我自己寫的字符串反轉的函數,懇請各位指教。
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
}
#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
do40

{41
char ch = *str;42
*str = *pEnd;43
*pEnd = ch;44
} while(++str != pEnd--);45
}46
else47

{48
do49

{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
else97

{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_2111
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
}

