使用 string.length() 的 for 循环

-4 c++ string for-loop

有人能帮我理解为什么这个循环不起作用吗?我正在尝试做两件事:

  1. 使用 mystring.length() 遍历字符串
  2. 查找字符串中的任何 0 或 1

这两个功能都不起作用。例如,如果我传入一个 123450 的字符串,则 a) 它只循环一次 b) 即使第一个字符是 1,它也返回“不,不,不”

bool recognizer(string s)
{
    string mystring = s;

    for (int i = 0; i < mystring.length(); i++) {
        if ((mystring[i] == 0) || (mystring[i] == 1))  {
            cout << "yes, yes, yes";
            return true;
        }
        else {
            cout << "no,no,no";
            return false;
        }
    }
    
}// end of recognizer
Run Code Online (Sandbox Code Playgroud)

Dan*_*ica 6

它只循环一次

那是因为你return来自循环体。

即使第一个字符是 1,它也会返回“不,不,不”

那是因为你不比较'0''1'字符,而是01整数。


建议版本:

bool recognizer(const std::string& s)
{
  return std::any_of(s.begin(), s.end(), 
    [](char c){ return (c == '0' || c == '1'); });
}
Run Code Online (Sandbox Code Playgroud)

或者,在 C++20 中:

bool recognizer(std::string_view s)
{
  return std::ranges::any_of(s, [](char c){ return (c == '0' || c == '1'); });
}
Run Code Online (Sandbox Code Playgroud)

或者,使用正则表达式:

bool recognizer(const std::string& s)
{
  return std::regex_match(s, "[01]");
}
Run Code Online (Sandbox Code Playgroud)