C++ 使用“for”的简单for循环代码的奇怪行为;查找“;C+中的函数+;(如果找到某个子字符串,则增加值)

C++ 使用“for”的简单for循环代码的奇怪行为;查找“;C+中的函数+;(如果找到某个子字符串,则增加值),c++,for-loop,C++,For Loop,我为一个解决问题的问题编写了一个简单的代码,但结果对我来说很奇怪 代码如下: #include <bits/stdc++.h> using namespace std; int main() { int n,num; string opr; cin>>n; num = 0; for(int i = 1; i <= n; i++){ cin>>opr; if(opr.find("+

我为一个解决问题的问题编写了一个简单的代码,但结果对我来说很奇怪 代码如下:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,num;
    string opr;
    cin>>n;
    num = 0;
    for(int i = 1; i <= n; i++){
         cin>>opr;
        if(opr.find("++"))
        {
            num+=1;
        }
        else if(opr.find("--"))
        {
            num-=1;
        }
    }

    cout<<num;
}
#包括
使用名称空间std;
int main()
{
int n,num;
字符串运算器;
cin>>n;
num=0;
对于(inti=1;i>opr;
if(运算查找(“+”)
{
num+=1;
}
else if(操作查找(“--”)
{
num-=1;
}
}

cout问题是
std::string::find
不返回
bool
——而是返回找到子字符串的索引,如果找不到,则返回
std::string::npos
。因为这是一个数字(实际上是一个
size\u t
)它可以隐式转换为bool并进行测试,但结果不是您想要的。您需要类似以下内容:

    if(opr.find("++") != std::string::npos)
    {
        num+=1;
    }
    else if(opr.find("--") != std::string::npos)
    {
        num-=1;
    }

如果您正在查找输入中是否存在子字符串。

std::string::find
不能以这种方式工作:

if(opr.find("++"))
你想要:

if (opr == "++")
或者如果您只想查看
opr
是否包含子字符串
“++”


诊断是正确的,但建议的解决方案不如另一个答案准确。谢谢你的重播…你能解释更多关于你对代码的分析吗?这就是我问这个问题的原因…行为太奇怪了,我没有找到解决方案(正如我说的,我已经解决了这个问题并不难)如果我理解正确,您只是在尝试执行n次递增或递减。在选择数学运算时,我鼓励您尝试使用不同的方法重新编写代码。我使用以下方法解决了此问题:,,,#include使用名称空间std;int main(){int n,num;string opr;cin>>n;num=0;for(int i=1;i>opr;if(opr[1]='+'){num++;}否则if(opr[1]='-'){num--;}如果你已经解决了它,但忘记和考虑避免。特别是两者的结合在较大的项目中是诱人的问题;)对不起,你能告诉我什么是字符串吗?:NPOS意思是?@ AHMADALALTWIL,它是用来指示“没有位置”的前哨值。也就是说,
find
没有找到它。因此,如果
find
返回的位置不是“无位置”标记,那么我们知道它找到了它。
if (opr.find("++") != std::string::npos)