【问题标题】:Checking a "password" string for space and returning true if found: C++检查空间的“密码”字符串,如果找到则返回 true:C++
【发布时间】:2016-05-07 17:15:05
【问题描述】:

我是 C++ 新手,正在开发一个使用向量的 C++ 基本用户名和密码程序。目前,我被困在一个检查密码字符串中是否有空格的函数上,如果发生这种情况,则返回 true。我试图实现 isspace() 但无法确定它是否正在检查我的字符串“密码”。提前感谢您抽出时间以任何方式进行审查和帮助。如果我缺少任何关键信息,我提前道歉。

    bool checkSpaces (string password) {
        for (int i = 0; i < password.length(); i++) {
            if (isspace(i)) {
                return true;
            } else {
                return false;
        }
    }

【问题讨论】:

  • 你是认真的吗?您正在检查循环索引是否为空格字符?你真的应该在发帖之前检查你写的代码......
  • return (password.find_first_of(' ') != std::string::npos);
  • @osnapitzkindle 这违背了发帖和寻求帮助的目的。显然我遇到了困难并寻求建议。如果我理解它并在发布之前“检查”了我的代码,我就不需要发布......
  • 好的,但这是一个非常基本的问题。显然,要检查的不是 i ,而是字符串索引 i 处的字符,正如回答者所说,像这样添加 return false 只会在第一个循环步骤返回 false 。在循环之后移动该指令。
  • 这里不允许基本问题吗?如果这个论坛不能用于此类问题,我深表歉意,但我宁愿提出并指出我的简单错误和缺乏理解,而不是继续不知道。

标签: c++ string vector


【解决方案1】:

顺便说一句,我将您的isspace() 更改为使用密码字符串而不是循环索引。这可能是一个错字。

因为你有else 子句,循环只执行一次,或者第一个字符是空格并且返回true,否则返回false。

用笔和纸试试。

   bool checkSpaces (string password) {
        for (int i = 0; i < password.length(); i++) {
            if (isspace(password[i])) {
                return true;
            }
/* --> */   else {
                return false;
        }
    }

循环的内容说如果字符不是空格,则返回false。所以当它碰到一个非空格字符时,它会返回,不管检查了多少个字符。

去掉else语句:

   bool checkSpaces (string password) {
        for (int i = 0; i < password.length(); i++) {
            if (isspace(password[i])) {
                return true;
            }
        }
        // If the for loop terminates, and gets here,
        // there were no spaces.
        return false;
    }

【讨论】:

  • 感谢您的友好解释,而不是拿我的帖子开玩笑。在我的脑海中,我认为它不会在 false else 返回时正确执行,并且仍在学习。
  • 如果回答有帮助,请点击对勾。
  • 最有帮助,已检查!
猜你喜欢
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2014-11-28
  • 2023-01-26
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多