剑指offer-字符串

1、常量字符串
为了节省内存,C++会把常量字符串放到单独一个内存区域。当有指针赋值给相同常量字符串时,他们会指向相同的内存地址。

int main(){
    char str1[] = "hello world";
    char str2[] = "hello world";
    if(str1 == str2)
        cout<<"str1 and str2 are same"<<endl;
    else
        cout<<"str1 and str2 are not same"<<endl;

    string str3 =  "hello world";
    string str4 =  "hello world";

    if(str3 == str4)
        cout<<"str3 and str4 are same"<<endl;
    else
        cout<<"str3 and str4 are not same"<<endl;
    return 0;
}

输出为:
str1 and str2 are not same
str3 and str4 are same

str1和str2是两个字符串数组,C++会分配两个长度为12的字节空间。这是两个初始地址不同的数组,因此str1和str2不同
str3和str4是两个字符串指针,无需分配内存就可以指向常量字符串,所以指向的是同一内存地址,得到的结果相同。

2、替换空格

题目描述

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

算法:
首先统计空格个数,因为是1个字符->3个字符,所以新字符串长度=原字符串长度+2*空格个数,再进行从后向前复制即可。

class Solution {
public:
    void replaceSpace(char *str,int length) {
        char *p = str;
        int n = 0;
        int count = 0;
        while(*p!='\0'){
            if(*p == ' ')
                n++;
            p++;
            count++;
        }
        count++;
        char *q = p + 2 * n;
        while (count != 0)
        {
            if(*p == ' '){
                *q = '0';
                q--;
                *q = '2';
                q--;
                *q = '%';
            }
            else{
                *q = *p;
            }
            q--;
            p--;
            count--;
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值