腾讯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 }

浙公网安备 33010602011771号