std::string::replace使用小计

ctrl+c / ctrl+v 真是害死人,看起来简单的东西,往往却又很容易出问题

究其原因,还在于只知其表不知其里,容易想当然。


今天遇到的问题是简单调用string::replace替换子串的问题,如:

std::string sTest1 = "12x567890";
std::string sTest2 = sTest1;
std::string sSub = "x";
std::string sRepl = "34";

int index = sTest1.find(sSub.c_str());
sTest1.replace(index, index+strlen(sSub.c_str()), sRepl); // sTest1 == "12347890" 错误,按这种方式抄了下用法

index = sTest2.find(sSub.c_str());
sTest2.replace(index, index+strlen(sSub.c_str()), sRepl.c_str()); // sTest2 == "12347890"  错误

// sTest2.replace(index, strlen(sSub.c_str()), sRepl.c_str()); // sTest2 == "1234567890"  正确

以上sTest2的结果不是想要的,其原因在于函数重载,第三个参数类型不一样前两个参数含义是不一样的。

查看replace实现源码,其功能注释是很清楚的。

看来太习惯于隐式类型转换,如const char* -> string ,不是什么好习惯。

 ===================写到这里,我发现还在犯错误

标准std::string::replace,sTest1替换的语法应该是通不过的而我能通过是因为用的stlport代替标准库。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值