剑指offer 替换空格

题目

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


代码

#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;

class Solution {
public:
    void replaceSpace(char *str, int length) {
#if 1
        char* s;
        int count = 0;
        for (int i = 0; str[i] != '\0'; i++){
            if (str[i] == ' ')
                count += 3;
            else
                count++;
        }

        s = (char *)malloc(sizeof(char)*count);
        str[count] = '\0';
        int k = 0;
        s[count] = '\0';
        for (int i = 0; str[i] != '\0'; i++){
            if (str[i] == ' '){
                s[k++] = '%';
                s[k++] = '2';
                s[k++] = '0';
            }
            else
                s[k++] = str[i];
        }

        //str = s;  
        //无效的赋值,出这个函数,s地址不存在,str无法访问
        for (int i = 0; i <count; i++)
            str[i] = s[i];
        str[count] = '\0';
        cout << str;
#endif
    }
};

int main(){
    Solution s;
    char *str = (char *)malloc(40); //这里需要动态分配。
//    str = "Hello World";          在只读空间,不可以分配内存。
    strcpy(str," Hello World ");
    s.replaceSpace(str, 14);

    return 0;
}

本题注意点

char*的赋值

char str = (char )malloc(40);
str = “Hello World”;
第一种赋值的方式是动态分配,在程序的其他位置可以动态分配空间。第二种赋值的方式是静态分配,在内存分配只读空间,不可以动态分配。这是两种赋值方式的区别。

指针赋值

str = s;
这种方式赋值当运行出了函数,就会失效,s已经被销毁,s的地址就销毁了,故str赋值失效。这里是个大坑啊,希望读者不要犯这种错误。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值