簡體   English   中英

C-使用strtok的嵌套循環

[英]C - Nested loop using strtok

我正在嘗試使用strtok將文本文件拆分為可以傳遞給拼寫檢查功能的字符串,該文本文件包含諸如'\\ n','?!等字符。 等等...我需要打印所有未通過拼寫檢查的單詞以及它們所在的行號。 我一直在努力跟蹤生產線。 到目前為止,我已經嘗試過了,但是它只返回文本文件第一行的結果:

char str[409377];
fread(str, noOfChars, 1, file);
fclose(file);

int lines=1;
char *token;
char *line;
char splitLine[] = "\n";
char delimiters[] = " ,.?!(){}*&^%$£_-+=";
line = strtok(str, splitLine);
while(line!=NULL){
    token = strtok(line, delimiters);
    while(token != NULL){
        //print is just to test if I can loop through all the words
        printf("%s", token);
        //spellCheck function & logic here
        token = strtok(NULL, delimiters);
    }
    line = strtok(NULL, splitLine);
    lines++
}

是否可以使用嵌套的while循環和strtok? 有更好的方法來跟蹤行號嗎?

strtok函數不可重入 它不能用於同時標記多個字符串。 這是因為它保持有關當前正在標記的字符串的內部狀態。

如果您擁有現代的編譯器和標准庫,則可以改用strtok_s 否則,您必須提出另一種解決方案。

您可以使用strtok,但是使用起來並不容易。 這是一個愚蠢的函數,它真正要做的就是用nul替換定界符,並返回一個指針,該指針指向已定界的序列的開頭。 因此具有破壞性。 它不能處理特殊情況,例如英語單詞被允許一個撇號(我們是一個單詞,我們不是),您必須確保列出所有分隔符。

最好自己編寫mystrok,這樣您才能了解它的工作原理。 然后將其用作您自己的單詞提取器的基礎。

造成該錯誤的原因是,您砍掉了第一行,然后這就是在隨后的調用中strok看到的全部內容。

暫無
暫無

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

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