题目: 实现一个函数,将字符串中空格符替换为 “%20”。
示例: 输入 “we are family”;
输出 “we%20are%20family”
要求: 不可以重新定义字符串, 可对原字符串扩容
思路:
替换前字符串长度为len1; 遍历一遍字符串,发现有n个空格,则扩容后字符串长度应为len1 + 2 * n(乘以2是因为"%20"占3个字符串);
设两个指针p1, p2. p1指向替换前字符串最后一个字符, p2指向替换后最后字符所在位置。为减少字符移动, 可从后往前复制;
每当p1指向空格, p1减1, p2逆向复制%20;
当p1 == p2时结束。
代码:
#include <iostream>
#include <string>
#include <map>
using namespace std;
void ChangeStr(string &str, int len)
{
int spaceNum = 0; //空格个数
for (int i = 0; i < len; ++i)
{
if (str[i] == ' ')
spaceNum++;
}
int changeLen = len + 2 * spaceNum;
str.resize(changeLen);
int p1 = len - 1;
int p2 = changeLen - 1;
while (p1 != p2)
{
if (str[p1] != ' ')
{
str[p2--] = str[p1--];
}else
{
p1--;
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
}
}
}
int main()
{
string str = "we are family. ";
int len = str.size();
ChangeStr(str, len);
cout << str;
system("pause");
}