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

时间:2015-10-23 20:45:47

标签: c++ arrays equals string-comparison

在代码的第一部分中,它检查用户是否输入了匹配的用户名和密码,如果匹配,则我们登录客户端。这部分代码很好。它适用于它应该。

第一个代码:

//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();
}

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

如果我输入存在第一个代码的用户名,那么第二个代码也会执行。如果incoming.username不等于existing.username。

,我只希望执行第二个代码

提前谢谢。

2 个答案:

答案 0 :(得分:0)

因为你的支票可能在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中的任何一个具有正确的用户名,则存在登录,如果存在并且密码匹配则正确。

答案 1 :(得分:0)

为什么不这样做?

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