今天做了第二道题目。首先回顾一下昨天的题目,一个二维数组,从左到右,从上到下逐渐增加。
可以使用两种方法,分别是暴力方法,另外一种是采用二分查找法。
题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路
如果从前开始朝后面遍历,则遇到空格进行替换的时候,很容易把后面的字符串给覆盖掉了,这是我们不需要的。所以必须要从后面开始读起来。
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==nullptr || length < 0) return;
int length_new;
int cnt;
for(int i = 0; i < length; ++i){
if(str[i] = ' ') cnt++;
}
if(!cnt) return;
length_new = length + cnt*2;
if(int j = length; j >+0; j--)
{
if(str[length--] = ' ') {
str[length_new--] = '%';
str[length_new--] = '2';
str[length_new--] = '0';
}else{
str[length_new--] = str[j];
}
}
}
}
参考函数
这是c语言里面的一个函数。
函数功能就是:将起始地址src且长度为count的内存拷贝到起始地址dst处,并返回dst,返回是为了实现链式表达式。
void* __cdecl memmove (void *dst, const void *src, size_t count)
{
void *ret = dst;
if (dst <= src || (char *)dst >= ((char *)src + count))
{
// 若dst 和 src区域没有重叠,则从起始处开始逐一拷贝
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
}
else
{
// 区域重叠,从尾部开始拷贝
dst = (char *)dst + count - 1;
src = (char *)src + count - 1;
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst - 1;
src = (char *)src - 1;
}
}
return (ret);
}