簡體   English   中英

如何使用strtok正確計算單詞數?

[英]How to correctly count words using strtok?

#include <stdio.h>
#include <string.h>

int main(void) {

  char tekst[10000], test=0;
  char* word;
  char word_copy[100][100];
  int i=0, lenght=0;

  printf("Type in your text: ");
  fgets(tekst, 10000, stdin);

  lenght=strlen(tekst)-1;
  if(lenght>1000)
  {
    lenght=1000;
  }

  word=strtok(tekst, " ,\".-");

  while( word != NULL)
    {
      word=strtok(NULL, " ,\".-");
      printf("%s ", word);
      i++;

    }

  printf("%d", i);

你好。 我想做的是僅通過使用strtok來計數單詞。 但是,如果我鍵入:“ example”或-example-,我得到的答案是“ 2”而不是“ 1”。 出於某種原因,當最后一個單詞為(null)時,它仍然會觸發循環,並且i ++可以工作...我對編程很陌生,所以我也很想寫下正確的代碼。

繼續注釋,這是修復代碼的另一種方法:

...
char *text = tekst;
while((word = strtok(text, " ,\".-"))) {
    text = NULL;
    printf("%s ", word);
    i++;
}
...

您想要刪除fgets()的尾隨換行符,如從fgets()input刪除尾隨的換行符中所述。

然后,我刪除了代碼中未使用的內容,例如長度。

strtok() 參考中的示例所提到的,您首先獲取令牌,然后再次調用該函數。 使用這種方法,您不必擔心將NULL一個單詞(您的代碼所做的)。

將所有內容放在一起,我們得到:

#include <stdio.h>
#include <string.h>

int main(void) {

  char tekst[10000];
  char* word;
  int i=0;

  printf("Type in your text: ");
  fgets(tekst, 10000, stdin);
  tekst[strcspn(tekst, "\n")] = 0;

  word=strtok(tekst, " ,\".-");

  while( word != NULL)
  {
      printf("%s ", word);
      word=strtok(NULL, " ,\".-");
      i++;

  }

  printf("%d", i);

  return 0;
}

輸出(輸入:“ stack-overflow”):

輸入您的文本:堆棧溢出2


PS: strlen()返回不帶空終止符的字符串的長度,無需自己減去。

暫無
暫無

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

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