3

論理的な問題だと思います。私は C# でコーディングしていますが、一般的な疑似コード ソリューションは大歓迎です。

たとえば、次のテキストを含むこのテキスト ファイルがあります。

blah "hello john"
blah 'the code is "flower" '
blah "good night"

二重引用符をループして何かをしたいのですが、一重引用符に含まれる二重引用符は無視したいと思います。開始の二重引用符と終了の二重引用符の位置を取得しています (string dataテキスト ファイルの内容を含む):

C#

// Start searching from beginning
int quotestart = 0, quoteend = 0;

while (data.IndexOf('"', quotestart) != -1)
{
  // Get opening double quote
  quotestart = data.IndexOf('"', quotestart);
  // Get ending double quote
  quoteend = data.IndexOf('"', quotestart + 1);

  string sub = data.Substring(quotestart + 1, quoteend - quotestart - 1);
  Console.WriteLine(sub);

  // Set the start position for the next round
  quotestart = quoteend + 1;
}

私のコードでは、出力は次のようになります。

hello john
flower
good night

「花」は一重引用符で囲まれているため、出力は次のようになります。

hello john
good night

編集

私は現在、単一引用符の間のすべてのデータを「A」などで埋めることから始めるアプローチに取り組んでいます。このようにして、二重引用符を反復処理するときに、単一引用符の間のデータは無視されます。それが正しいアプローチかどうかはわかりません。

4

4 に答える 4

7

有限ステート マシンをグーグルで調べてみましたが、コンピューター エンジニアリングの正式なトレーニングを受けていなかったため、少し迷ったことを認めなければなりません。追加のポインタはありますか?

FSM は、最も単純な形式のコンピューターの 1 つです。アイデアは、有限量の「状態」情報と安定した入力ストリームがあるということです。各入力により、現在の状態と現在の入力のみに基づいて予測可能な方法で状態が変化し、予測可能な出力が発生します。

したがって、入力が単一の文字で、出力が単一の文字または「null」文字であると想像してください。これがあなたが望むことをするFSMです:

  • 状態は、、、OUTSIDEです。INSIDEDOUBLEINSIDESINGLE
  • 入力は"'およびxです。(WOLOG はxその他の文字を表します。)

3 つの状態と 3 つの入力があるため、9 つの可能な組み合わせがあります。

  • 私たちがいるならOUTSIDEget x、とどまりOUTSIDE、放出しnullます。
  • 私たちがいる場合はOUTSIDE、取得"し、行っINSIDEDOUBLEて放出しnullます。
  • 私たちがいる場合はOUTSIDE、取得'し、行っINSIDESINGLEて放出しnullます。
  • 私たちがいINSIDEDOUBLEて get x、滞在INSIDEDOUBLEして放出する場合x
  • 私たちがいてINSIDEDOUBLE、取得"し、行っOUTSIDEて放出する場合null
  • 私たちがいINSIDEDOUBLEて get '、滞在INSIDEDOUBLEして放出する場合'
  • 私たちがいINSIDESINGLEて get x、滞在INSIDESINGLEして放出する場合null
  • 私たちがいINSIDESINGLEて get "、滞在INSIDESINGLEして放出する場合null
  • 私たちがいてINSIDESINGLE、取得'し、行っOUTSIDEて放出する場合null

残っているのは、開始状態が であるということだけですOUTSIDE

では、入力が であるとしましょう1 " 2 " 3 ' 4 " 5 " ' 6。状態と出力は次のとおりです。

  • OUTSIDE取得1、放出null、滞在OUTSIDE
  • OUTSIDE取得"し、放出nullし、行きINSIDEDOUBLEます。
  • INSIDEDOUBLE取得2、放出2、滞在INSIDEDOUBLE
  • INSIDEDOUBLE取得"し、放出nullし、行きOUTSIDEます。
  • OUTSIDE取得3、放出null、滞在OUTSIDE
  • OUTSIDE取得'、発行null、実行INSIDESINGLE

...残りは自分で記入してください。

コードを書くためのスケッチはこれで十分ですか?

于 2013-10-22T22:49:29.110 に答える