题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”则输出“We%20are%20happy.”
o(n)的时间复杂度内替换空格,过程如下图过程,(a),(b),(c),(d),(e)
自己实现如下:
void rep(char* p)
{
int k = 0;
char *q = p;
if(p!=NULL)
{
for(;*p!='\0';p++)
{
k++;
}
k++;
cout<<k<<endl;
}
char* p1;
char* p2;
p1=p;
p2=p+4;
for(;p1!=p2;)
{
if(*p1!=' ')
{
*p2=*p1;
p2--;
p1--;
}
else
{
*p2='0';
p2--;
*p2='2';
p2--;
*p2='%';
p2--;
p1--;
}
}
for(;*q!='\0';q++)
{
cout<<*q;
}
}
教材代码如下:
/*length 为字符数组str的总容量,大于或等于字符串str的实际长度*/
void ReplaceBlank(char str[], int length)
{
if(str == nullptr && length <= 0)
return;
/*originalLength 为字符串str的实际长度*/
int originalLength = 0;
int numberOfBlank = 0;
int i = 0;
while(str[i] != '\0')
{
++ originalLength;
if(str[i] == ' ')
++ numberOfBlank;
++ i;
}
/*newLength 为把空格替换成'%20'之后的长度*/
int newLength = originalLength + numberOfBlank * 2;
if(newLength > length)
return;
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
{
if(str[indexOfOriginal] == ' ')
{
str[indexOfNew --] = '0';
str[indexOfNew --] = '2';
str[indexOfNew --] = '%';
}
else
{
str[indexOfNew --] = str[indexOfOriginal];
}
-- indexOfOriginal;
}
}