C++的string的这个find成员函数是怎么回事啊?

PunWinger 2012-02-02 03:57:13

string replace_string(string &strSrc, const string &strOld, const string &strNew)
{
string::size_type pos(0);

while (pos = strSrc.find(strOld , pos) != string::npos)
{
strSrc.replace(pos, strOld.length(), strNew);
pos += strNew.length();
cout << pos << '\t' << strSrc << endl;
}

return strSrc;
}

int main(void)
{
string strTest("2001,1,1,23,12,3,1,33,12,");
string strOut = replace_string(strTest, ",", "|");
cout << strOut << endl;

system("pause");
return 0;
}


一直都无法正常输出,查了一下,原来在replace_string函数里死循环了
输出的一直都是1 2 01,1,1,23,12,3,1,33,12,
我不明白,find无法在2001,1,1,23,12,3,1,33,12,这样一个字符串里正常查找到逗号这个字符
...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
PunWinger 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 forever_feng 的回复:]

优先级问题只是导致死循环,replace用法不对会导致替换结果错误。
[/Quote]
replace用法我没错,你看我1楼的勘误
pengzhixi 2012-02-02
  • 打赏
  • 举报
回复
while ((pos = strSrc.find(strOld , pos)) != string::npos)
平凡的思想者 2012-02-02
  • 打赏
  • 举报
回复
优先级问题只是导致死循环,replace用法不对会导致替换结果错误。
PunWinger 2012-02-02
  • 打赏
  • 举报
回复
为什么2楼的发言被删了?
csdn会自动删除所谓的广告发言?我就多发了几个啊而已..

问题已经解决,是因为判断条件出错,那个!= 的优先级比 = 高,我没有结合,所以pos的值永远是1
平凡的思想者 2012-02-02
  • 打赏
  • 举报
回复
replace用法不对:
把strSrc.replace(pos, strOld.length(), strNew)改为strSrc.replace(pos, pos + strOld.length(),strNew)即可。

PunWinger 2012-02-02
  • 打赏
  • 举报
回复
代码贴错了,主函数里
string strOut = replace_string(strTest, ",", "|");
改为
string strOut = replace_string(strTest, ",", "\t");
这样调用

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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