簡體   English   中英

使用strtok對C中的字符串進行標記(包括數字作為分隔符)

[英]Tokenize a String in C with strtok (Include Digits as Delimiters)

所以我有以下功能:

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

基本上,我正在做的是將文本段落標記為單詞,以便在以后進行進一步的分析。 我有文字,也有分隔符。 唯一的問題是與所有其他定界符同時標記數字。 我知道我可以在ctype.h使用isdigit 但是,我不知道如何將其包括在strtok

例如(顯然是錯誤的): strtok(paragraph, " ,.-!?()isdigit()");

遵循這些原則。 但是,由於我在此階段擁有每個標記(單詞),因此if我可以使用語句進一步對每個單詞進行標記化(以位數分割),是否會進行某種后處理?

例如,輸出將進一步降級為:

ND
F
W
H
V
NUM
R

15 words // updated counter to include new tokens

在這方面, strtok非常簡單:只需將所有數字一一列出即可,例如:

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

注意: strtok是一個古老的,不可重入的函數,不應在現代程序中使用。 您應該切換到strtok_r ,它具有類似的接口,但是可以在並發環境和其他需要重新進入的情況下使用。

為什么不只是使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM