剑指offer--替换空格

题目描述:

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路为:循环字符串,遇到空格,将后面的暂时保存,将空格位置空“\0”,前面的字符串链接一个“%20”,再链接上后面的字符,重复该操作,代码如下:

void replaceSpace(char *str,int length) {
    char* head = str;//提取指针指向第一个字符
    int count = 0;//记录前面走了多少字符, 以计算后面需要多少内存去保存后面的字符串
    while(*head)
    {
        count++;
        if(*head==' ')
        {
            char* temp = (char*)malloc(length-count);//分配内存 保存后面的字符串
            strcpy(temp,head+1);//
            *head = '\0';//将空格位置空“\0”
            strcat(str,"%20");//前面的字符链接“%20”
            strcat(str,temp);//再将后面的字符串链接上
            head+=2;//从该位置后移2个位置(因为%20占3个字节,相对于原先的空格‘ ’多了2个单位长度,因此后移2)
        }
        head++;
    }
}

还有看到别人的一种更简便的方法:将char* 转换为string类型,利用string的函数将空格替换为“%20”

代码如下:

void replaceSpace(char *str,int length) {
	string s(str);
	int i=0;
	while((i=s.find(' '))!=-1)
	{
		s.erase(i,1);
		s.insert(i,"%20");
	}
	auto ret = s.c_str();
	strcpy(str,ret);
}

递归思路后续再加......

猜你喜欢

转载自blog.csdn.net/qq_18548149/article/details/79511009