VSB*_*VSB -1 c++ if-statement conditional-statements
我遇到了一个奇怪的问题.由于某种原因多个|| 语句,即使除以逗号和括号也不起作用.我期望工作的最后一件事是&语句,它要求满足两个条件,但在我的情况下,它适用于一个条件,就好像它是一个OR语句.
有人请向我解释为什么会这样.我很迷茫.
作品:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
string quest;
quest = "Where is my dog?";
string::iterator m;
vector<string>question;
string t;
for(m = quest.begin(); m != quest.end(); m++)
{
if(*m != ' ' & *m != ',' & *m != '?' & *m != '.') //works with & and &&
{
t.push_back(*m);
}
else
{
cout << t << endl;
question.push_back(t);
t.clear();
}
}
}
Run Code Online (Sandbox Code Playgroud)
不起作用:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
string quest;
quest = "Where is my dog?";
string::iterator m;
vector<string>question;
string t;
for(m = quest.begin(); m != quest.end(); m++)
{
if(*m != ' ' || *m != ',' || *m != '?' || *m != '.') // DOES NOT WORK
{
t.push_back(*m);
}
else
{
cout << t << endl;
question.push_back(t);
t.clear();
}
}
}
Run Code Online (Sandbox Code Playgroud)
if(*m != ' ' || *m != ',' || *m != '?' || *m != '.') // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)
你期望做什么?你问的是某些东西是不是A或者是B.其中任何一个都是真的(只要A和B不是同一个东西),所以你的表达总是正确的.
看起来你可能想要:
if(*m != ' ' && *m != ',' && *m != '?' && *m != '.')
Run Code Online (Sandbox Code Playgroud)
如果*m是空格,逗号,问号或句号以外的任何内容,则该条件为真.