C++ | string类按位赋值小技巧

一切的起因是string类的谜之初始化。

在写代码的时候,我发现即使没有用字符串初始化string对象,也可以对string对象进行下标操作,就像这样:

#include
#include
using namespace std;
int main()
{
	string s;
	s[0]='x';
	s[1]='y';
	cout<<"下标操作后的串s:"<<s;
	cout<<"\n串s的长度:"<<s.length();
	return 0;
}

在Dev C++上的运行结果:
1
可以看出,即使是下标从0开始,操作后的子串仍然是空串。这说明上述赋值方法是有问题 错误的。


那么,应该如何正确地赋值呢?
可行的方式如下:

#include
#include
using namespace std;
int main()
{
	string s;
	s+='a';
	s+="b";
	s=s+'c';
	cout<<"操作后的串s:"<<s<<endl;
	s[0]='x';
	s[1]='y';
	cout<<"下标操作后的串s:"<<s;
	cout<<"\n串s的长度:"<<s.length();
	return 0;
}

值得注意的是,string类的加号重载后,也可以在原串末尾添加一个字符,如:

s+='a';

上述程序的运行结果也是很显然的,在串中有元素的部分就可以修改元素值了:
C++ | string类按位赋值小技巧_第1张图片
当然,只有在已经有元素的部分才能使用下标操作改变元素的值。


你可能感兴趣的:(C/C++,c++)