腾讯2017实习 字符移位

题目:

小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
你能帮帮小Q吗?

思路:

采用冒泡排序的思想,从后往前扫描。先找到一个小写字母,然后向前找到一个大写字母,把大写字母放到这之间的字符串后面,依次进行。

代码:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 string helper(string s)
 6 {
 7     int size = s.size();
 8     int j;
 9     for (int i = size - 1; i > 0;--i)
10     {
11         if (islower(s[i]))
12         {
13             j = i;
14             while (islower(s[j]) && j > 0)
15                 --j;
16             if (j == 0 && islower(s[j]))
17                 break;
18             char temp = s[j];
19             for (;j < i; ++j)
20             {
21                 s[j] = s[j + 1];
22             }
23             s[i] = temp;
24         }
25     }
26     
27     return s;
28 }
29 
30 int main()
31 {
32     string s;
33     while (cin >> s)
34         cout << helper(s) << endl;
35 }

 

posted @ 2016-08-20 20:28  zhangbaochong  阅读(280)  评论(0)    收藏  举报