簡體   English   中英

為什么strtok只打印第一個字?

[英]Why is strtok printing only first word?

我正在使用strtok將字符串轉換為單個單詞 我做了以下事情:

int main() {
  char target[100];
  char *t;
  scanf("%s",target);
  t = strtok(target," ");
  while (t!= NULL)
  {
    printf("<<%s>>\n", t);
    t = strtok (NULL, " ");
  }
  return 0;
}

輸入是一個字符串,例如'this is a string',我得到的輸出是<<this>>

你寫scanf的方式只接受字符串直到空格

的scanf( “%S”,目標);

所以你需要改變從控制台獲取輸入的方式

scanf("%99[^\n]",target);

更改:

scanf("%s",target);

至:

fgets(target, 100, stdin);

因為第一個在遇到輸入中的空格時不會停止。

輸出:

this is a string
<<this>>
<<is>>
<<a>>
<<string
>>

注意換行符fgets()存儲如何影響輸出。 如果你願意,你可以簡單地丟棄它,如下所示:

fgets(target, 100, stdin);
target[strlen(target) - 1] = '\0';

現在的輸出是:

this is a string
<<this>>
<<is>>
<<a>>
<<string>>

如果你想繼續使用scanf() ,那么你可以使用下面的代碼片段:

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

int main() {
   char target[100];
   char *t;
   //scanf("%s",target);
   scanf("%99[0-9a-zA-Z ]", target);
   printf("%s\n",target);
   t = strtok(target," ");
   while (t!= NULL)
   {
      printf("<<%s>>\n", t);
      t = strtok (NULL, " ");
   }
   return 0;
}

在這里工作代碼。

只需編寫scanf("%s",target); 將只讀取輸入直到第一個空格; 這就是為什么你只得到第一個單詞作為輸出。 通過寫scanf("%99[0-9a-zA-Z ]", target); ,您正在從輸入流中讀取99個字符(包括數字0-9azAZ和空格)。

希望這是有幫助的。

暫無
暫無

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

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