1. 程式人生 > >劍指offer-字串

劍指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--; } } };