将行数组拆分为单词

时间:2014-09-21 03:55:09

标签: c arrays struct

我有一个由一行单词组成的数组(我使用了fgets)。我现在想要创建一个新数组作为包含相同行的相同结构的一部分,但是分成只有字母数字字符的单词(这样行[1] .word_in [3]会给我第1行中的第3个单词)。我有一点尝试,但它没有用。

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

    line linenum[101];

    while fgets(linenum[i].linewords, 101, stdin) != NULL) {
        i++
        linenum[i].separateword = linenum[i].linewords.Split(' ');
        if (isalnum(int linenum[i].separateword) != 0) {
            /* need to remove that character */
        }
    }

我很抱歉我真的不知道自己在做什么。我的第一个问题显然是拆分结构,因为这给了我一个错误。谢谢

编辑: 我已经加入了我正在做的事情;但是,在分配var。

时,我收到了分配错误
    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, ' '); /*this line causes seg fault*/
        i++
        }
    }

1 个答案:

答案 0 :(得分:0)

strtok()返回一个字符指针。它在

char *strtok(char *s, const char *delim) ;

所以问题是你没有保存返回的值。

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

        //strcpy(linenum[i].separateword,linenum[i].linewords);
        linenum[i].seperatewords=strtok(linenum[i].linewords, ' ');
        i++
        }

它将解决您的问题。 有关strtok()的更多详细信息: strtok()