2014-09-21 79 views
0

我的代碼如下。我正在使用一個結構並獲取輸入文本文件。我將它分成幾行,然後嘗試將每行分隔爲單獨的單詞。使用strtok,它目前只打印每行的第一個單詞。我怎樣才能解決這個問題?C - 使用strtok僅給出每行的第一個單詞嗎?

typedef struct { 
    char linewords[101]; 
    char separateword[101]; 
} line; 

下面是主要的:

line linenum[101]; 
char var[101] 
char *strtok(char *str, const char delim); 

while fgets(linenum[i].linewords, 101, stdin) != NULL) { 

    char* strcopy(); 
    char* strtok(); 
    strcpy(linenum[i].separateword,linenum[i].linewords); 

    strtok(linenum[i].separateword, " "); /*line i'm referring to*/ 
    i++; 
    } 
} 

我提前道歉任何混亂。我想要的是讓亞麻布[i] .separateword [0]返回第一個字,等等。這可能嗎?或者還有另一種將我的意見分解成單​​詞的方式嗎?

謝謝

+0

第二個電話必須使用'NULL'。 – 2014-09-21 06:47:45

+0

@Pavel這是否意味着在當前strtok行之後,我應該添加'strtok(NULL,「」); ? – KittiCat 2014-09-21 06:52:17

+0

要獲取字符串中的所有單詞,需要重複調​​用'strtok()'。有關示例,請參閱http://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm。 – NPE 2014-09-21 06:53:31

回答

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

typedef struct { 
    char linewords[101]; 
    char *separateword[51]; 
} line; 

int main(void){ 
    line linenum[101]; 
    int i = 0; 

    while(fgets(linenum[i].linewords, sizeof(linenum[i].linewords), stdin) != NULL) { 
     char *token, *delm = " \t\n"; 
     int j = 0; 
     for(token = strtok(linenum[i].linewords, delm); 
      token; 
      token = strtok(NULL, delm)){ 
      linenum[i].separateword[j++] = token; 
     } 
     linenum[i++].separateword[j] = NULL; 
    } 
    {//test print 
     char **p = linenum[0].separateword; 
     while(*p) 
      puts(*p++); 
    } 
    return 0; 
} 
+0

我很抱歉成爲一個巨大的痛苦,但你能告訴我這是如何工作的嗎?我已經閱讀了一些內容,我有點困惑! – KittiCat 2014-09-21 07:10:55

+0

@KittiCat這個保存指針被strtok剪切掉該行中單詞的位置。 – BLUEPIXY 2014-09-21 07:21:27

+0

這給我很多錯誤和警告? – KittiCat 2014-09-21 07:36:23

相關問題