1

文字列にバイナリ (1/0) のみが含まれているかどうかを判断するために、C++ で正規表現を使用しようとしています。私は .matches("[01]+") を使用してJavaでこれを非常に簡単に行いました。しかし、今私が c++ に変換しようとしているとき、私は問題を抱えています

Visual Studio 2010 を使用していますが、このエラーが発生します

エラー: オーバーロードされた関数 "regex_match" のインスタンスが引数リストと一致しません

これが私のコードです

#include <iostream>
#include <string>
#include <regex>
using namespace std;

// ...

string bFU;
do
{
    cout << "\nEnter a binary value containing up to 16 digits: ";
    getline (cin, bFU);
    if (!regex_match(bFU, "[01]+") || bFU.length()>16)
    {
        cout << "\nError: Invalid binary value.\nTry again.\n"
                "Press Enter to continue ... ";
        bFU = "a";
        cin.ignore(80, '\n');
    }
} while (!regex_match(bFU, "[01]+"));

Visual Studio では、赤い下線が引かれた regex_match にマウスを合わせると、そのエラーが発生します。

助けてくれてありがとう、私は何十ものウェブサイトをグーグルで検索して分類してきましたが、問題がさらに曖昧になっています

4

3 に答える 3

1

regex_match正規表現には文字列ではstd::basic_regexなく を使用します。

利用可能なオーバーロードと使用例については、こちらを参照してください。

于 2013-03-12T15:04:04.657 に答える
0

これが私があなたのプログラムを書く方法です:

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main()
{
   const basic_regex<char> binmatcher("[01]+");
   string bFU;
   for (bool matched = false; !matched;)
   {
      cout << "\nEnter a binary value containing up to 16 digits: ";
      getline(cin, bFU);
      matched = regex_match(bFU, binmatcher);
      if (!matched || bFU.length()>16)
      {
         cout << "\nError: Invalid binary value.\nTry again.\n"
            "Press Enter to continue ... ";
         cin.ignore(80, '\n');
      }
   }
   cout << "The binary value I found acceptable was: " << bFU << '\n';
   return 0;
}

残念ながら、g ++ 4.7.2では正規表現のサポートが壊れているため、これを実際にテストすることはできません。

お気づきregex_matchのように、文字列は取りません。また、そうすべきではありません。正規表現のコンパイルは、一般に、正規表現を使用するよりも大幅に計算量が多くなります。

Perlは、正規表現に最初に遭遇したときに正規表現をコンパイルするため、非常に高速です。このステップは、ユーザーには隠されており、状況によっては(式が実行時に生成される場合など)驚くべき結果につながります。

これがのドキュメントです::std::regex_match。この場合に必要なオーバーロードはオーバーロード6であり、引数としてa::std::stringとaを取ります。::std::basic_regex

于 2013-03-12T15:59:26.720 に答える
0

の参照regex_matchを確認すると、渡すパラメータが関数が実際に取るパラメータと一致しないことがわかります。

関数の使用方法については、リファレンスの例を参照してくださいregex_match

于 2013-03-12T15:05:14.647 に答える