题目
请实现一个函数,把字符串中的每个空格替换成“20%”。
思路
从后往前替换,这样可以减少移动次数。
在合并两个数组(包括字符串)时,如果从前往后复制每个数字,则会重复移动某些数字多次,那么就可以考虑从后往前复制。
代码
#include<iostream>
using namespace std;
void ReplaceBlank(char str[])
{
int before_length=0;
int after_length=0;
int numberOfBlank=0;
int i=0;
while(str[i]!='\0')
{
if(str[i]==' ')
numberOfBlank++;
before_length++;
i++;
}
after_length=before_length+2*numberOfBlank;
int p1=before_length;
int p2=after_length;
while(p1>=0&&p2>p1)
{
if(str[p1]==' ')
{
str[p2--]='%';
str[p2--]='0';
str[p2--]='2';
p1--;
}
else str[p2--]=str[p1--];
}
}
int main()
{
char str[]="a b c d";
ReplaceBlank(str);
cout<<str;
}
补充知识:
1.关于函数的形参与实参,对于数组而言,传数组名就相当于传了指针了。
#include<iostream>
using namespace std;
void change(char str[])
{
str[2]='a';
}
int main()
{
char str[]="abcd";
change(str);
cout<<str;
}
以上代码的输出是abad。
2.用char*表示字符串时,字符串是常量,不能对其进行修改,只能用于传值。
#include<iostream>
using namespace std;
void change(char *str)
{
str[2]='a';
}
int main()
{
char *str="abcd";
change(str);
cout<<str;
}
以上代码将无法运行。