2

だから私は次の機能を持っています:

void tokenize() {
    char *word;
    char text[] = "Some - text, from stdin. We'll see! what happens? 4ND 1F W3 H4V3 NUM83R5?!?";
    int nbr_words = 0;

    word = strtok(text, " ,.-!?()");

    while (word != NULL) {
    printf("%s\n", word);
    word = strtok(NULL, " ,.-!?()");
    nbr_words += 1;
    }
}

出力は次のとおりです。

Some
text
from
stdin
We'll
see
what
happens
4ND
1F
W3
H4V3
NUM83R5


13 words

基本的に私がやっていることは、テキストの段落を単語にトークン化して、後でさらに分析することです。テキストと区切り文字があります。唯一の問題は、残りのすべての区切り文字と同時に数字をトークン化することです。で使えることが分かりisdigitましたctype.h。ただし、それを に含める方法がわかりませんstrtok

例(明らかに間違っています):strtok(paragraph, " ,.-!?()isdigit()");

それらの線に沿った何か。しかし、私はこの段階で各トークン (単語) を持っているので、各単語をさらにトークン化し、数字で分割するために使用できるある種の後処理ifステートメントはありますか?

たとえば、出力はさらに次のように劣化します。

ND
F
W
H
V
NUM
R

15 words // updated counter to include new tokens
4

2 に答える 2

2

strtokこの点で非常に単純です: すべての数字を区切り文字として 1 つずつリストするだけです - 次のように:

strtok(paragraph, " ,.-!?()0123456789");

注:strtokは、最新のプログラムで使用すべきではない、古い再入不可の関数です。に切り替える必要がstrtok_rあります。これは同様のインターフェイスを備えていますが、同時実行環境や再入可能性が必要なその他の状況で使用できます。

于 2013-10-20T16:43:25.927 に答える