有人能帮我理解为什么这个循环不起作用吗?我正在尝试做两件事:
这两个功能都不起作用。例如,如果我传入一个 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)
它只循环一次
那是因为你return来自循环体。
即使第一个字符是 1,它也会返回“不,不,不”
那是因为你不比较'0'和'1'字符,而是0和1整数。
建议版本:
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)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |