题目来源于力扣:
请实现一个函数,将字符串中的空格替换为%20
示例:
输入:We are family
输出:We%20are%20family
用malloc实现
代码如下:
char * ReplaceBlank(char *s)
{
int count=0;
int len=strlen(s);//计算字符串的长度
for(int i=0;i<len;i++)
{
if(s[i] == ' ')
{
count++;//计算字符串中空格的个数
}
}
char *str=(char *)malloc(sizeof(char)*(len+1+3*count));//开辟动态内存
int j=0;//存放str的下标
for(int i=0;i<len;i++)
{
if(s[i]!=' ')//不是空格
{
str[j++]=s[i];//将s中的元素赋值到str中
}
else//否则将%20按顺序存放到str中
{
str[j++]='%';
str[j++]='2';
str[j++]='0';
}
}
str[j]='\0';
return str;
}
注意问题:
1.字符串以’\0’,结尾,动态开辟内存之后向里面存字符串,字符串结束后一定要给str ‘\0’.
2.strlen()计算的是字符串的有效长度所以没有计算’\0’的位置,但是在动态开辟内存的时候需要开辟strlen()+1大小的内存来存放字符串中’\0’的位置.
3.如果将计算字符串中 空格的个数改为下面代码
int count=0;
while(*s != '\0')
{
if(*s == ' ')
{
count++;
}
}
此时,while循环要比for循环更消耗时间,这是在给系统提交的过程中发现的.