0

私はこれを理解しようとしてきましたが、回避策がありますが、明らかな何かが欠けていないことを確認したかっただけです。基本的に、特定のルールに従う一連のコマンドがあります。数字、ASCII 文字、または特定の記号を含むものはすべてトークンであり、<、>、|、&& などは区切り文字です。見つけたものを特定し、それらを配列に格納できるようにする必要があります。

だから、whileループで私は持っています

a = sscanf (cp, "%[0-9a-zA-Z!@:/-.,^+% ]", str);

他に方法が見つからなかったので、探す記号の 1 つとしてスペースを含めました。代わりに、単語(および可能性のあるスペース)を取得した後、呼び出します

 delimiters[] = " ";
 token = strtok(str, delimiters);

これにより、空白が削除され、トークンだけが残ります(スペースがなかった場合、単語は変更されません)。sscanf で同様のことを行う方法があるかどうかは興味があります。文字列の間に空白がある場合は文字列が既に分割されていることがわかっているためですが、もう一度呼び出して空白が表示されると、読み取れませんなんでも。

そうじゃないならそれもいい。一日中悩まされています。

4

1 に答える 1

1

フォーマットを次のように変更できます

a = sscanf (cp, " %[0-9a-zA-Z!@:/-.,^+%]", str);

形式の先頭' 'は、空白文字の [おそらく空の] シーケンスをスキップし、スペース以外の許容トークン文字のシーケンスをスキャンします。

于 2013-01-17T17:29:57.067 に答える