字符串取反问题

问题:将字符串取反。

例如,“abcd” ---> "dcba"

这里的思想取自合并排序。下面的源码存在一个问题。目前我还没有解决掉,欢迎大家指导!!

 1 /* 
 2  * Q: 将字符串取反。例如,
 3  * “abcd” --> "dcba"
 4  */
 5 #include <iostream>
 6 #include <cstring>
 7 
 8 using namespace std;
 9 
10 void Merge(char *str, int start, int mid, int end)
11 {
12     int lenleft = mid - start + 1;
13     int lenright = end - mid;
14     char *pleft = new char[lenleft + 1];
15 
16     strncpy(pleft, str + start -1, lenleft);
17     strncpy(str + start - 1, str + mid, lenright);
18     strncpy(str + start + lenright - 1, pleft, lenleft);
19 
20     delete[] pleft;
21 }
22 
23 /* 
24  * 有一个BUG:需要在最后的时候加一个空格!
25  * 因为在转换过程中,删掉了最后一个字符。
26  */
27 void MergeString(char *str, int start, int end)
28 {
29     if (start < end) {
30         int mid = (start + end) / 2;
31 
32         MergeString(str, start, mid);
33         MergeString(str, mid + 1, end);
34         Merge(str, start, mid, end);
35   //      cout << str << endl;
36     }
37 }
38 
39 int main()
40 {
41     char str[] = "abcd ";
42 
43     cout << "Before: \n" << str << endl;
44 
45     cout << "\nin service: \n";
46     MergeString(str, 0, strlen(str));
47 
48     cout << "\nAfter: \n" << str << endl;
49 
50     return 1;
51 }

 

posted @ 2013-03-22 16:07  life91  阅读(1133)  评论(0编辑  收藏  举报