剑指offer-字符串

来源:互联网 发布:数据帧的长度计算公式 编辑:程序博客网 时间:2024/05/20 01:36

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--;        }    }};
0 0
原创粉丝点击