替换空格
题目:请实现一个函数,把字符串中的每个空格替换成%20。例如:输入“we are happy”输出“we%20are%20happy”。
拿到这个题时,第一个要考虑的就是内存够不够的问题。因为原来空格是一个字符,现在要将一个空格替换为三个字符,内存会变大。现在假设是在内存足够的情况下修改。
过程如下:
完成一个空格的替换:
完成替换:
测试用例的考虑:
- 正确输入:空格位于最前面;空格位于中间;空格位于最后;连续多个空格
- 错误输入:无空格
- 非法输入:空指针;空字符串;只有连续多个空格
代码如下:
void ChangeStr(char* arr,int sz)
{
if(arr==NULL||sz<0)
{
//非法输入
//对输入的判断
return;
}
int i=0;
int old_len=0;
int space=0;
for(i=0;i<sz;i++)
{
if(arr[i]!='\0')
{
old_len++;
}
if(arr[i]==' ')
{
space++;
}
}
int new_len=old_len+2*space;
if(new_len>sz)
{
//对大小的溢出的判断
return;
}
int index1=old_len;
int index2=new_len;
while(index1>=0&&index2>index1)
{
if(arr[index1]==' ')
{
arr[index2--]='0';
arr[index2--]='2';
arr[index2--]='%';
}
else
{
arr[index2--]=arr[index1];
}
--index1;
}
}