题目描述
请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。
测试样例:
“Mr John Smith”,13
返回:”Mr%20John%20Smith”
”Hello World”,12
返回:”Hello%20%20World”
思路:首先我们应该得到替换后的字符串的长度,计算公式为:新的长度=旧的长度+空格数目*2;
然后我们定义两个整型变量分别指向旧的长度和新的长度;最后通过字符串的后移(旧的字符串数组的元素为空格的时候,新的字符串数组就增加新的元素“%20”,否则就直接复制)实现空格替换。
这道题我没有创建新的字符串进行复制操作,空间复杂度大大的降低了。
#include<iostream>
#include<string>
using namespace std;
void replaceSpace(char* iniString,int length)
{
if(iniString == NULL||length<=)
return;
int i,Blacknum=;
for(i=;iniString[i]!='\0';i++)
{
if('a'<=iniString[i]&&iniString[i]<='z'||'A'<=iniString[i]&&iniString[i]<='Z'||iniString[i]==' ')
{
if(iniString[i]==' ')
Blacknum++;
}
else
{
cout<<"字符串不合法"<<endl;
return;
}
}
int newlength1 = length+*Blacknum;
int oldLength = length;
int newLength = newlength1;
while(oldLength>=&&newLength>=oldLength)
{
if(iniString[oldLength]==' ')
{
iniString[newLength--]='0';
iniString[newLength--]='2';
iniString[newLength--]='%';
}
else{
iniString[newLength--]=iniString[oldLength];
}
--oldLength;
}
}
void main()
{
char p[]="Mr John Smith";
cout<<p<<endl;
replaceSpace(p,);
cout<<p<<endl;
getchar();
}