如何更改/删除这个糟糕的“if”。该函数检查char数组“equation”是否只包含0到9之间的数字以及“if”中的符号。
"material-ui": "^0.20.0"
答案 0 :(得分:0)
我建议使用std :: regex_match:
std::regex pattrn("[0-9*/+-]+");
bool only_legal_equation_chars(char const * equation)
{
return std::regex_match(equation, equation+strlen(equation), pattern);
}
答案 1 :(得分:0)
std::all_of
非常适合这里:
std::string mystr{"123+-*["};
auto is_allowed_character = [](unsigned char x) //related to C
{
return (x >= 48 && x <= 57) ||
x == '+' ||
//so on
;
}
return std::all_of(mystr.begin(), mystr.end(),
is_allowed_character);
我删除了if
循环,并使其成为更惯用的C ++。这个东西也适用于任何迭代器,甚至是std::cin
生成的迭代器。
答案 2 :(得分:0)
我很想使用这样的好std::strspn:
bool containsOnlyAllowedSymbols(const char* equation)
{
return std::strspn(equation, "0123456789+-*/()[]{}") == std::strlen(equation);
}
答案 3 :(得分:0)
另一个regex
解决方案:
#include <iostream>
#include <regex>
bool containsOnlyAllowedSymbols(char const *equation)
{
std::regex re(R"([^0-9(){}[\]*+-/])");
return !std::regex_search(equation, re);
}
int main()
{
std::cout << containsOnlyAllowedSymbols("(10+20)-200*4") << std::endl;
std::cout << containsOnlyAllowedSymbols("10+20-{200}abc") << std::endl;
return 0;
}
如果表达式可以包含空格,则为正则表达式模式添加空格。