-4

cでこのような文字列をトークン化するにはどうすればよいですか?

char str1[] = " property :: content | label ";
char str2[] = "property::content";
char str3[] = "content";

[編集]

私は以下を試しました:

char str[] = " property :: content | label ";
char *property, *content, *label;

property = strtok(str, "::");
content = strtok(NULL, "|");
label = strtok(NULL, "|");

printf ("%s %s %s\n", property, content, label);

ただし、文字列を文字に従って分割するため、ラベルの区切りに使用されるパイプ文字に対して機能します。ただし、「::」区切り文字は文字列ではなく文字列です。どう対処したらいいのかわからない。

[編集2]

私もこのコードを持っています:

char sentence [] = "property :: content | label";
char property [30];
char content [30];
char label [30];

sscanf (sentence, "%s :: %s | %s", property, content, label);
printf ("<span property=\"%s\" content=\"%s\">%s</span>\n", property, content, label);

各char配列のサイズを動的に設定するにはどうすればよいのでしょうか...

ありがとう。

4

1 に答える 1

0

必要なのは基本的なレクサーです

それを知る最良の方法は、コンパイラの本を手に取ってそれを読むことです。

つまり、一連の正規表現が必要になり、最終状態で対応するdfaと最も一致するものが見つかるまで、文字列を正規表現と照合し始めます。

または、すべてのトークンがスペースで区切られている場合は、とを使用strtokして、特別な単語(など)と残りの入力strcmpを区別することができます。::

字句解析が完了したら、パーサーが必要になります。私はあなたのアプリケーションを知らないので、あなたのパーサーは本当に単純であることがわかるかもしれません、しかしそうでなければ、この答えはあなたが始めるのを助けるかもしれません。

于 2012-05-27T23:36:34.103 に答える