题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路1:从前到后或从后到前进行遍历,发现空格则用“%20”替换,时间复杂度O(n^2);
思路2:先遍历数组得出空格数,增加数组有效长度,后通过两个不同的指针P1,P2一个指向原数组,一个指向增加长度后的数组,未发现空格时进行替换,发现空格时P1--,P2--三次即可。贴出代码:::
//请实现一个函数,将一个字符串中的空格替换成“%20”。
//例如,当字符串为We Are Happy.则经过替换之后的字符串为
//We%20Are%20Happy。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
//方法一:从尾到头获取空格处并替换
//时间复杂度O(n^2)
void Replace(char *str, int length)
{
int j = 0;
int len = length;
int k = 0;
for (int i = length - 1; i >= 0; i--)
{
if (str[i] == ' ')
{
//str[i] = '0';
j = i;
for (k = length - 1; k>j; k--)
{
str[k + 2] = str[k];
}
str[j] = '%';
str[j + 1] = '2';
str[j + 2] = '0';
length = length + 2;
}
}
}
//方法二:先遍历数组获取空格数,后通过定义两个不同指针对其进行替换。
//时间复杂度:O(n)
void Replace1(char str[],int length)
{
int num = 0;
int nlength = 0;
int olength = length - 1;
for (int i = 0; i < length; i++)
if (str[i] == ' ')
num++;
//获取扩展后的长度nlength
nlength = olength+2 * num;
//赋值操作
while (olength >= 0 && nlength > olength)
{
if (str[olength] == ' ')
{
str[nlength--] = '0';
str[nlength--] = '2';
str[nlength--] = '%';
}
else
{
str[nlength--] = str[olength];
}
olength--;
}
}
int main()
{
char str[10] = "We Are Fa";
char str1[100];
strcpy(str1,str);
Replace1(str1,10);
cout << str1 << endl;
return 0;
}