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);
}