检查字符串是否包含一系列数字

cpx*_*cpx 4 c++ string

我想测试一个std::string包含任何范围的数字,例如5 to 35在一个std::string s = "XDGHYH20YFYFFY"是否有函数或我必须将一个数字转换为字符串,然后使用循环找到每个?

Jer*_*fin 9

我可能会使用一个区域设置来处理除数字之外的所有内容作为空白区域,并从充满该区域设置的字符串流中读取数字并检查它们是否在范围内:

#include <iostream>
#include <algorithm>
#include <locale>
#include <vector>
#include <sstream>

struct digits_only: std::ctype<char> 
{
    digits_only(): std::ctype<char>(get_table()) {}

    static std::ctype_base::mask const* get_table()
    {
        static std::vector<std::ctype_base::mask> 
            rc(std::ctype<char>::table_size,std::ctype_base::space);

        std::fill(&rc['0'], &rc['9'], std::ctype_base::digit);
        return &rc[0];
    }
};

bool in_range(int lower, int upper, std::string const &input) { 
    std::istringstream buffer(input);
    buffer.imbue(std::locale(std::locale(), new digits_only()));

    int n;

    while (buffer>>n)
        if (n < lower || upper < n)
            return false;
    return true;
}

int main() {
    std::cout << std::boolalpha << in_range(5, 35, "XDGHYH20YFYFFY");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)