我有一个从文件中读取行并将每行中的每个字符串存储在向量中的函数。
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 ,则程序在各自情况下的行为与预期相同。
我不认为我是必需的,但我也尝试将 () 放在每个运算符周围,这样它就不会相互干扰。还是不行。
这似乎是相同的代码。为什么它在一种情况下不起作用,而在另一种情况下起作用?