2011-11-09 16 views
-4

基本的にDBにあるマスクに対して文字列を検証したいのですが、検証するためにはそのマスクにルールを割り当てる必要があります。つまり、[D] = 0<=10です。それでは、私が行っているが、私の質問があるので、それはあなたがベクトル入力マスクの作成

すなわち

で、様々な細胞にルールを割り当てることができ、二つの異なるベクトルでそれらをそのマスクを検索し、抽出された文字から[]と保存されています
a[0] = 0<=10 
a[1] = "H" 

私のコードは、上の文字列がDBからではないことを覚えておいてください。プロセスが同じになるためDBから来たものと仮定して作成した文字列です

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

    } 
+4

達成したいことを教えてください。あなたはまた、質問があるかどうか私たちに教えて忘れてしまった。受け入れられるサンプルマスクと入力値を表示できますか? (私は正規表現を使用してあなたに些細な解決策を見せてくれることを嬉しく思います) – sehe

+0

うわー...タイトルにタグを書く必要があるという神話のきちんとしたバリエーション。質問のタイトルは補遺ですか? –

答えて

0

私は本当にあなたの質問を理解していない、しかし、ここで私が提案することができるものである。

  • の代わりのif-else-かの巨大なを使用して、使用するのstd ::文字列を試してみてください::要素を抽出するとstd ::文字列:: SUBSTRを見つけます。

  • std :: stringをcharに変換して反転させる理由が実際にはわかりません。 std :: string :: findとstd :: string :: substrを使用して、vectStringを1つのステップで取得する方が良い考えです。

のstd ::文字列は、あなたがそれに慣れていない場合、あなたはを見てみたいことがあり、強力な機能を提供しています:http://www.cplusplus.com/reference/string/string/

+0

私は基本的に正規表現を使用することができる文字列を検証したいと思います。サンプルマスクは[D]である可能性があります - 許容値= 0と10の間の任意の数字別のマスクは[DT]です - 許容値= 04NOV - 10NOVではありません4NOV – CodersSC

+0

Boost.Regexを使用してください。そして、それはC++ 0xになっています。 – lwg643

+0

ok 2桁のデビットカード番号が16桁であることを確認して、1つの番号が正しいことと1つのisentとsubstrを使用して最初のカード番号に桁がないと指定した場合、チェックインする場所で他の番号が始まらない場合があります(カード番号が正しくても失敗する可能性があります)。 – CodersSC

0

あなたは与えられた文字列がで受け入れられるかどうかを確認しますかいくつかの正規表現ですか? これが当てはまる場合は、ルールを表す正規表現オブジェクトを使用して、一致する結果が元の文字列と等しいかどうかを確認してください。

+0

はい私はmmayがその質問をしなければならないと思います。すなわち、12345 12345 < - 私はsubstrメソッドを使って両方の数値を検証するので、その式を使って\\ d {5} bohの数値は合格します1234 12345はsubstr私がsubstrに0,4を開始するように指示し、2番目の番号に対して6,5で開始するように、2番目の番号は失われます。 – CodersSC

+0

std :: string s = "12345 12345"; boost :: regex_match const( "\\ d {5}"); std :: string a(s。最初の数字セットが1234であれば、2番目のsubstrは(7,5)になります。2番目の数字セットが6で始まらないことを意味します。7 == FAILであっても正しいです。 – CodersSC

+0

正規表現を使用する前に文字列を分割することができます。 boostは\ d *のような正規表現をサポートしています。これはいくつかの数字を意味します。 – brioche869