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

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

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

#include<iostream>
#include<string>
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<iostream>
#include<string>
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';

上述程序的运行结果也是很显然的,在串中有元素的部分就可以修改元素值了:
2
当然,只有在已经有元素的部分才能使用下标操作改变元素的值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值