首页 > 解决方案 > 调用 string.find() 函数并将其返回值分配给 if 条件内的变量

问题描述

当我将 .find() 函数放入 if 条件时,我无法理解到底发生了什么。类似的 for 循环调用似乎效果很好。

我的部分代码是这样的:

    size_t endPos = strbuf.find(endSeq)+endSeq.size();
    cout<<endPos<<endl;

    if (size_t endPosif = strbuf.find(endSeq)+endSeq.size() != string::npos)
    {
        cout<<endPosif<<endl;
    }

    for (size_t endPosfor = strbuf.find(endSeq)+endSeq.size();endPosfor != string::npos; 
        endPosfor=strbuf.find(startSeq,endPosfor+1)+endSeq.size())
    {
        cout<<endPosfor<<endl;
    }

输出:

466
1
466

是什么导致了这种行为?我想在 if 语句中使用 endPosif。

标签: c++stringif-statement

解决方案


我想知道为什么我的变量在语句中等于 1。那是我的问题

if (size_t endPosif = strbuf.find(endSeq)+endSeq.size() != string::npos)

这个strbuf.find(endSeq)

  • 当什么都没有找到时返回string::npos(就像)-1
  • 或拉格内的东西<0, strbuf.size() - endSeq.size()>

当你添加到那个endSeq.size()(什么永远不会是零)时,结果总是不同的string::npos

所以这strbuf.find(endSeq)+endSeq.size() != string::npos被评估为true

true转换为1时转换为size_t

所以你有两个错误:

  • 没有找到任何东西时错误地处理场景
  • 评估顺序(这就是为什么user7860670要写括号)

推荐阅读