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