请实现一个函数,把字符串中的每个空格替换成“%20”。
例如:输入“We are happy.”则输出“We%20are%20happy.”
首先,我们可以画图来表示:
当我们需要将空格换成%20 的时候,则一个空格就要变成三个空格来替换成%20,如图所示:
代码实现的时候,并不是变成三个,而是每有一个空格,则就在将原来的长度上增加2倍的空格的长度。
NewLen = OldLen + BlankNum * 2;
在实现代码的时候,首先要定义算出原来的长度Oldlen,字符串中的空格的个数BankNum,根据空格的个数算出替换字符串后的新数组的长度
第一步是计算原数组的长度和空格的个数:
while (arr[OldLen] != '\0')//当没有到字符串结尾处时,继续执行
{
if (arr[OldLen] == ' ')//当遇到空格时,空格个数增加1;
{
BlankNum++;
}
OldLen++;//只要数组没有到达结尾,length1就增加1
}
接下来就是进行空格的替换:
while (OldBack != 0)
{
if (arr[OldBack] == ' ')
{
arr[NewBack--] = '0';
arr[NewBack--] = '2';
arr[NewBack] = '%';
}
else
{
arr[NewBack] = arr[OldBack];
}
OldBack--;
NewBack--;
}
还有打印数组的函数的实现。
以下是完整的代码:
//请实现一个函数,把字符串中的每个空格替换成“%20”。
//例如:输入“We are happy.”则输出“We%20are%20happy.”。
#include<iostream>
using namespace std;
#include<assert.h>
void ReplaceBlank(char *arr)
{
assert(arr);
//先统计字符串的实际长度和空格的个数
int OldLen = 0;//定义数组的实际长度
int NewLen = 0;
int BlankNum = 0;//定义计算数组中的空格的个数
int NewBack = 0;
int OldBack = 0;
while (arr[OldLen] != '\0')//当没有到字符串结尾处时,继续执行
{
if (arr[OldLen] == ' ')//当遇到空格时,空格个数增加1;
{
BlankNum++;
}
OldLen++;//只要数组没有到达结尾,length1就增加1
}
NewLen = OldLen + BlankNum * 2;//替换空格后的数组的长度等于原来的长度+空格的长度乘以2
OldBack = OldLen - 1;
NewBack = NewLen - 1;
while (OldBack != 0)
{
if (arr[OldBack] == ' ')
{
arr[NewBack--] = '0';
arr[NewBack--] = '2';
arr[NewBack] = '%';
}
else
{
arr[NewBack] = arr[OldBack];
}
OldBack--;
NewBack--;
}
}
void PrintArr(char arr[])//打印数组的函数
{
int len = strlen(arr);
int i = 0;
for (i = 0; i < len; ++i)
{
cout << arr[i];
}
cout << endl;
}
int main()
{
char arr[20] = "We are happy.";
cout << "替换前的字符串:";
PrintArr(arr);
ReplaceBlank(arr);
cout << "替换后的字符串:";
PrintArr(arr);
system("pause");
return 0;
}
代码实现的结果: