面试题5:替换空格
在书本的第51页上有这道题目的详细讲解
在网络编程中我们如果接收到的内容中存放着空格或者%#这类内容需要进行替换处理,否则无法识别,会出现问题
在写这道题目的时候要注意传入的字符串的长度,要优先预留好足够长度的字符串内存空间的长度,否则会出现溢出的情况
代码如下所示,测试案例通过
#include <iostream>
using namespace std;
void ReplaceBlack(char string[],int length)
{
//进来先做特殊情况的处理
if (string == nullptr || length <= 0)
{
return;
}
//第一个用来找空格的数量,第二个是计算原始的长度
int BlackNum = 0;
int BeginNum = 0;
int i = 0;
while (string[i] != '\0')
{
if (string[i] == ' ')
{
++BlackNum;
}
++BeginNum;
i++;
}
cout << "BlackNum:" << BlackNum << char(10);
cout << "BeginNum:" << BeginNum << char(10);
int NewLen = BlackNum * 2 + BeginNum;
//这一步的处理是相当于是说:我这个新的字符串数组的长度是必须要小于传入的最大长度
if (NewLen > length)
{
return;
}
//设置两个指针
int FrontPoint = BeginNum;
int BackPoint = NewLen;
while (FrontPoint < BackPoint && FrontPoint >= 0)
{
if (string[FrontPoint] == ' ')
{
string[BackPoint--] = '0';
string[BackPoint--] = '2';
string[BackPoint--] = '%';
}
else
{
string[BackPoint--] = string[FrontPoint];
}
--FrontPoint;
}
}
void PrintArr(char str[])
{
int i = 0;
while (str[i] != '\0')
{
cout << str[i];
i++;
}
cout << char(10);
}
int main()
{
char str[100] = " hello my";
ReplaceBlack(str,100);
PrintArr(str);
return 0;
}