単語数アルゴリズムの実装を探しています。ただし、その中に表示されるものはすべて~two tildes~
1単語と見なされます。このため、正規表現がおそらく最善の方法だと思いますか?
カウントは、約10000文字のサンプルセットでキーを押すたびに計算する必要があるため、正しく設定することをお勧めします。
単語数アルゴリズムの実装を探しています。ただし、その中に表示されるものはすべて~two tildes~
1単語と見なされます。このため、正規表現がおそらく最善の方法だと思いますか?
カウントは、約10000文字のサンプルセットでキーを押すたびに計算する必要があるため、正しく設定することをお勧めします。
キーを押すたびにすべてを再計算する必要がありますか? 2 つのスペースの間にいる場合を除き、キー~
またはスペースで単語数を変更できないようです。そして、これらの特別なキーについては、通常、バッファ全体を再処理することなく、単語数の変更をローカルで判断できるはずです。
とにかく、正規表現は必要ありません。が表示されるたびにフラグを反転するだけです~
。
str = str.Trim() + " ";
var count = 0;
var inWord = false;
var inTilde = false;
foreach (var c in str)
{
switch (c)
{
case ' ':
case '\t':
case '\r':
case '\n':
if (!inTilde && inWord)
{
inWord = false;
count++;
}
case '~':
if (inTilde)
{
count++;
inWord = false;
}
inTilde = !inTilde;
default:
inWord = true;
}
}
テストされていませんが、かなり簡単です...
また、終了チルダがない場合でも、 と同様~hi one~two~three four~
にカウントされることに注意してください。hi one, two, three four
~hi one~two~three four
数値カウンターに結合された単純な有限状態オートマトンは正常に動作するはずです。
次の状態があるとします。
OUTSIDE
WORD
TILDEWORD
OUTSIDEから始めます。次に、各文字の処理を開始し、次にどの状態に移行するかを判断します。
OUTSIDEにいる場合:
ファイルの最後に到達した場合は、その場所にとどまります。
チルダ文字が表示された場合は、TILDEWORD状態に移動し、単語カウンターを上げます。
単語文字が表示された場合は、WORD状態に移動し、単語カウンターを上げます。
そうでなければ、私たちがいる場所にとどまってください。
他の 2 つの州の事例分析も同様であるはずです。全体がボードゲームのように見えます。
------> OUTSIDE <----------> WORD
^ ^
| |
| V
+-------------> TILDEWORD
有限状態オートマトンのどこにいるかを追跡する C プログラムを書くことは直接的です。
矢印は双方向の場合があります。次の入力を検討してください。
hello~happy fabulous world~testing is good
問題文は、別の単語をスキャンしているときにチルダが表示されたときに何が起こるかについて、少しあいまいです。上記が 5 つの単語のシーケンスになるように、別の単語としてカウントする必要があると思います。もちろん、あなたの解釈は異なるかもしれません。エッジケースを検討してください!