用于检查char数组是否仅包含允许的字符的函数

时间:2017-12-30 17:07:50

标签: c++

如何更改/删除这个糟糕的“if”。该函数检查char数组“equation”是否只包含0到9之间的数字以及“if”中的符号。

"material-ui": "^0.20.0"

4 个答案:

答案 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;
}

https://ideone.com/wR0yA0

如果表达式可以包含空格,则为正则表达式模式添加空格。