【问题标题】:How to check if a string does not equal another string in an array?如何检查一个字符串是否不等于数组中的另一个字符串?
【发布时间】:2015-10-23 20:45:46
【问题描述】:

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

第一个代码:

//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,我只希望执行第二个代码。

提前谢谢你。

【问题讨论】:

  • 请显示MVCE。你甚至没有告诉我们username 的类型,这很重要。

标签: c++ arrays equals string-comparison


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    为什么不这样做?

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

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2012-09-28
      • 2019-05-11
      • 2010-10-13
      相关资源
      最近更新 更多