劍指offer-字串
阿新 • • 發佈:2019-02-06
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--;
}
}
};