1.5 编写代码将字符串中的空格替换为‘%20’
解答:‘%20’有三个字符构成,遍历直接替换的话需要增加字符串的空间,然后进行移位和替换,因此,先计算空格数目,直接算好替换后需要空间,然后从尾部开始遍历。
算法流程:
1 遍历字符串,记录下有多少个空格;
2 从字符串尾部重新解析:
(1) 如果当前字符为空格,在写入字符串'%20'
(2) 非空格则直接记录。
//用%20替换空格
//函数参数为引用型,否则值传递str不发生变化
void ReplaceFun(string &str)
{
int num_space=0;
for (string::iterator itr=str.begin();itr!=str.end();itr++)
{
if (*itr==' ')
{
num_space++;
}
}
int newLength=str.length()+2*num_space;
char *newstr=new char[newLength+1];//替换后字符串所需要空间
newstr[newLength]='\0';//字符串结束符
for (int i=str.length()-1;i>=0;i--)
{
if(str[i]==' ')
{
newstr[newLength-1]='0';
newstr[newLength-2]='2';
newstr[newLength-3]='%';
newLength-=3;
}
else
{
newstr[newLength-1]=str[i];
newLength-=1;
}
}
str.assign(newstr);//字符串赋值
}