0

次の形式のデータを含む文字列を解析する必要があります。

  • 文字列で指定された画像は、ゼロ、1 つ、または複数の四角形に関連付けられています。
  • 四角形の座標は括弧で囲まれ、コンマで区切られた 4 つの整数で形成されます。
  • 各長方形はコンマで次の長方形と区切られています。
  • 文字列はセミコロンで終わります。

文字列の例:

"image.png": (xmin, ymin, xmax, ymax), (xmin, ymin, xmax, ymax);

次の情報を取得したいと思います。

  • 画像のファイル名を含むa string、たとえばimage.png;
  • vector<Rect>長方形のシーケンスを含む です。

Rect は、以下で定義される構造体です。

struct Rect
{
    int xmin;
    int ymin;
    int xmax;
    int ymax;
}

外部ライブラリを使用せずに、簡単な方法で問題に対処するにはどうすればよいですか?

4

2 に答える 2

1

簡単な方法で問題に対処するには、スイッチ ケースを備えた自動化実装を使用できます。必要な状態は 10 個だけです。状態は次のとおりです。INIT、FILENAME、COLON、PARENTHSIS、XMIN、YMIN、XMAX、YMAX、コンマ、受け入れます。初期値stateINIT. したがって、switch case ステートメントは次のようになります。

ch = getNextChar();
switch( state )
{
    case INIT:
        if( ch == '\"' )
          state = FILENAME;
        break;
    case FILENAME:
        if( ch != '\"' )
          filename.append(ch);
        else
          state = COLON;
        break;
    case COLON:
    // more cases;
    // ...
    default:
}

このように、この文字列を簡単に解析できます。

于 2013-05-01T16:21:45.887 に答える
0

クランしてみてください。として :

clang++ -std=c++0x -stdlib=libc++ yourfile.cpp

Clang 3.3 は正規表現をサポートしています。必要に応じて Linux で実行します。

于 2013-05-09T15:11:28.053 に答える