String.replace(...)执行结果的不确定性?

RedStar81 2003-03-24 02:38:27
String.replace(...)执行结果的不确定性?
---------------------------------------

本人在帮人写HDB3编码时,
遇到一个问题:
在String中使用replace时:
结果有时正确,有时错误.

请试一下下面的代码:
#include <iostream>
#include <string>
#include <stdio.h>

int main(){

string s("She am programming.");
cout<<s.size()<<endl;
s.replace(4,5,string("am00")); //结果有问题
cout<<s.size()<<endl;
cout<<s<<endl;


string s_("aa11223344bbee");
s_.replace(2,3,string("i am sleeping"));
cout<<s_<<endl; //结果是不正确的.

string str1("01234ppp56");
string str2("am0011111");
string str3;
str3 = str1;
str3.replace(1,4,string("am0011111"));
str1.replace(1,4,str2);
cout<<str1<<endl;
cout<<str3<<endl;

getchar();
return 1;
}
...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
RedStar81 2003-03-24
  • 打赏
  • 举报
回复

兄弟,谢了....
STL实践的太少,没注意到细节...
huxw 2003-03-24
  • 打赏
  • 举报
回复
s.replace(4,5,string("am00")); //结果有问题
//上面的结果应该是:She am00 programming.
// 而实际的结果是:She am00rogramming.
She am00ogramming. 上面那个结果是你臆造的吧。我不太信哪个商用编译器会出这样的篓子。

4和5都是sizt_type类型,4表示偏移,5表示长度,可见程序结果完全正确。
你所谓的结果应该是,那是对于iterator特化的replace才会具有的行为。
建议重新阅读stl的manual。

另:replace里面的string构造纯属多此一举。

string s_("aa11223344bbee");
s_.replace(2,3,string("i am sleeping"));
cout<<s_<<endl; //结果是不正确的.
//这个结果也是错误的.

只有第三个是正确的.
RedStar81 2003-03-24
  • 打赏
  • 举报
回复
string s("She am programming.");
cout<<s.size()<<endl;
s.replace(4,5,string("am00")); //结果有问题
cout<<s.size()<<endl;
cout<<s<<endl;
//上面的结果应该是:She am00 programming.
而实际的结果是:She am00rogramming.

string s_("aa11223344bbee");
s_.replace(2,3,string("i am sleeping"));
cout<<s_<<endl; //结果是不正确的.
//这个结果也是错误的.

只有第三个是正确的.
liu_feng_fly 2003-03-24
  • 打赏
  • 举报
回复
没什么不正确啊(vc6。0 + win2k),你是什么环境?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧