面试题:替换空格

题目来源于力扣:
请实现一个函数,将字符串中的空格替换为%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循环更消耗时间,这是在给系统提交的过程中发现的.

猜你喜欢

转载自blog.csdn.net/csdn_edition/article/details/106591806