C++ 创建自己的输入掩码

C++ 创建自己的输入掩码,c++,C++,基本上,我想根据数据库中的掩码验证字符串,但是要根据它进行验证,我需要为该掩码分配一个规则,即[D]=0::iterator; 向量:迭代器itera; 矢量串; for(it=Vect.begin();it!=Vect.end();+it){ 字符串a; 对于(itera=it->begin();itera!=it->end();++itera){ 我不太明白你的问题,但我可以建议如下: 尝试使用std::string::find和std::string::substr来提取元素,而不是使用

基本上,我想根据数据库中的掩码验证字符串,但是要根据它进行验证,我需要为该掩码分配一个规则,即
[D]=0::iterator;
向量:迭代器itera;
矢量串;
for(it=Vect.begin();it!=Vect.end();+it){
字符串a;
对于(itera=it->begin();itera!=it->end();++itera){

我不太明白你的问题,但我可以建议如下:

  • 尝试使用std::string::find和std::string::substr来提取元素,而不是使用巨大的if-else-if

  • 我真的不明白为什么要将std::string转换为char,然后将其反转。使用std::string::find和std::string::substr一步获得vectString可能是一个更好的主意


string提供了强大的函数,如果您不熟悉它,您可能想看看:

是否要验证某些正则表达式是否可以接受给定的字符串?
如果是这种情况,为什么不使用一些表示规则的正则表达式对象,然后检查其匹配结果是否等于原始字符串?

您忘了告诉我们您想要实现什么。您也忘了告诉我们问题是什么。您能给我们一个示例掩码和将被接受的输入值吗d?(我很高兴向您展示一个使用正则表达式的简单解决方案)哇…关于必须在标题中写入标记的神话的巧妙变化。问题标题是附录?!好的,我基本上想验证一个字符串,我知道您可以使用正则表达式。示例掩码可以是[d]-接受值=0和10之间的任何数字,另一个掩码为[DT]-acceptede value=04NOV-10NOV not 4NOVuse Boost.Regex,这再简单不过了。它正在变成C++0x。好的,想象一下你正在验证一个16位数的两个借记卡号,想象一下一个数字是正确的,一个是正确的,还有一个是有substr的。如果我指定从何处开始验证,第一个卡号缺少一个数字,那么另一个数字就会丢失失败,因为另一个号码可能不会从您指定的检查起始位置开始(即使该卡号正确,也可能导致该卡号失败)?是的,我现在正在使用boost正则表达式,但我不知道你是否能克服上面的小问题,我正在考虑使用boost_FUSION_ADAPT_STRUCT并创建一个解析器,你们有人推荐吗?是的,我想我可能必须这样做,问题是,即12345 12345 std::string s=“12345 12345”;boost::regex_match const(“\\d{5}”);std::字符串a(s.substr(0,5)),然后是(7,5)处的第二个substr如果第一组数字是1234,这意味着第二组数字从6开始,而不是7==失败,即使它是正确的。我想知道您是否可以在使用正则表达式之前拆分字符串。boost是否支持像\d*这样的正则表达式,这意味着几个数字。是的boost确实支持类似于该行的东西嗯,是的,也许我可以把琴弦分开,保持在一个固定的位置,这就是你的意思吗?我真的不明白你说的保持在一个固定的位置是什么意思。
a[0] = 0<=10
a[1] = "H"
string s("[sh][a][mar][i]");
    vector< vector<char> > Vect;
    vector<char> vect;
    int i = 0;
    while(i < s.size()) {
        if(s[i]=='[') {
            i++;
            vect.push_back(s[i]);
            i++;

        }
        else if(s[i] == ']') {
            i++;
            Vect.push_back(vect);
            vect.clear();
        }
        else {
            vect.push_back(s[i]);
            i++;
        }
    }


    vector< vector<char> >::iterator it;
    vector<char>::iterator itera;
    vector<std::string> vectString;


    for (it = Vect.begin() ; it != Vect.end() ; ++it ) {
        string a;
        for (itera = it->begin() ; itera != it->end() ; ++itera) {
            cout << *itera;
            a += *itera;

        }
        vectString.push_back(a);

    }