如何检查一个字符串是否与数组中的另一个字符串不相等

How to check if a string does not equal another string in an array?

本文关键字:字符串 数组 不相等 另一个 是否 一个 何检查 检查      更新时间:2023-10-16

在代码的第一部分中,它检查用户输入的用户名和密码是否匹配,如果匹配,则登录客户端。这部分代码没问题。

首码:

//If the user entered a username & pass that matches a stored user & pass
if (incomingClients[i].username == existingClients[e].username) {
    if (incomingClients[i].password == existingClients[e].password) {
        //LogInClient();
    }
}

在第二部分中,它应该检查用户是否输入了不存在的用户名,如果不存在,那么我们告诉用户他/她输入了不存在的用户名。

第二代码:

//If the user entered a username that DOES NOT match a stored user
if (incomingClients[i].username != existingClients[e].username) {
    //NotifyClientUserDoesntExist();
}

我在这里遇到的问题是第二个代码总是为真。为什么会这样?

如果我输入一个存在的用户名,第一个代码执行,第二个代码也执行。我只希望第二个代码执行,如果传入。Username不等于exists . Username .

提前感谢。

因为你的check可能在for循环中,比如

for (int e = 0; e < existingClients.size(); ++e) {
  if (incomingClients[i].username == existingClients[e].username)
    if (...) {
    }
  if (incomingClients[i].username != existingClients[e].username) {
    ..
  }
}

但是逻辑是不正确的,因为一旦发现一个现有客户端具有不同的用户名,您就会考虑不存在的用户。代码应该像这样:

const auto& user = find_if(begin(existingClients), end(existingClients), [](const User& user) { return user.username == existingClients[i].username; }
bool isExistingLogin = user != existingClients.end();
bool isCorrectLogin = isExistingLogin && user->password == incomingUsers[i].password;

如果existingClients有正确的用户名,则存在登录,如果存在且密码匹配,则登录是正确的。

为什么不这样做呢?

if (incomingClients[i].username == existingClients[e].username) {
    if (incomingClients[i].password == existingClients[e].password) {
        //LogInClient();
    }
}
else {
    //NotifyClientUserDoesntExist();
}