gpt4 book ai didi

c++ - 使用逻辑 NOT, !, 与不使用它

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:16 24 4
gpt4 key购买 nike

我有一个函数,它从文件中读取行并将每行中的每个字符串存储在一个 vector 中。

void openf(std::string s)
{
std::string line;
std::string b;
std::ifstream in;
in.open(s);
std::vector<std::string> vec;
if(in.is_open()) {
std::cout << "File is open\n" << std::endl;
while(std::getline(in,line)) {
for(decltype(line.size()) i = 0; i != line.size(); ++i) {
if(isspace(line[i]) || ispunct(line[i])) {
vec.push_back(b);
b = "";
}
else {
b += line[i];
}
}
}
}
for(auto a:vec)
std::cout << a << std::endl;
in.close();
}

这行得通。

但如果我这样做

if(!isspace(line[i]) || !ispunct(line[i])) {
b += line[i];
}
else {
vec.push_back(b);
b = "";
}

什么都不打印。

如果我没有逻辑 OR 语句,而只是单独使用 !isspace 和 !ispunct,则程序在相应情况下会按预期运行。

我认为我不是必需的,但我也尝试将 () 放在每个运算符周围,这样它们就不会相互干扰。还是不行。

好像是同一个代码。为什么它在一种情况下不起作用而在另一种情况下却起作用?

最佳答案

你有:

if (A || B)
do this
else
do that

要否定它,您需要:

if (!(A || B))
do that
else
do this

!(A || B) 结果为 (!A && !B)

所以你需要写

if (!isspace(line[i]) && !ispunct(line[i]))

参见 DeMorgan's Laws了解更多信息。

关于c++ - 使用逻辑 NOT, !, 与不使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18599144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com