什么使它在标记化后插入新元素时不起作用

时间:2017-08-20 16:26:33

标签: c linked-list insert tokenize

我开始研究C以获得一般的想法。我创建了一个链表结构,我可以插入新元素没有任何问题。列表的想法是当已经插入相同的元素时增量计数,顺便说一下,我从文件中读取单词。

      char* pch;
      pch = strtok(line," ,.-()\r\n\t");
      while (pch != NULL)
      {
        printf("%s-",pch);
        int i = 0;
        for(; pch[i]; i++){
           pch[i] = tolower(pch[i]);
        }
        insertFirst(r,(char*) pch,1); // inserts but doesn't increment the count;
        pch = strtok (NULL, " ,.-()\r\n\t");
     }

然后当我尝试在下面的代码中使用此列表时,它会添加单词,但不会增加计数。它将单词作为一个新元素(当我多次硬编码其他内容时会增加,如insertFirst(“testString”))

//INSERT METHOD-WRONG ONE
void insertFirst(Node* r, char* word, int count){
   if(find(r, word)){
       struct Node* temp = find(r,word);
       temp->count += 1; //
   }
   else{
      struct Node *link = (struct Node*) malloc(sizeof(struct Node));
      strcpy(&link->word, &word);
      link->count = count;
      link->next = r->head;
      r->head = link;
   }
}

上面的代码逐行读取文件,删除所有符号,空格,新行等。我想将单词放在列表“r”中。我确信insertFirst方法中没有问题,因为它没有tokenize

就可以正常工作
//WORKING INSERT METHOD
void insertFirst(Node* r, char* word, int count){
   if(find(r, word)){
       struct Node* temp = find(r,word);
       temp->count += 1;
   }
   else{
      struct Node *link = (struct Node*) malloc(sizeof(struct Node));
      link->word = malloc(strlen(word)+1);
      strcpy(link->word, word);
      link->count = count;
      link->next = r->head;
      r->head = link;
   }
}

感谢评论,下面的代码就像一个魅力

Activities

1 个答案:

答案 0 :(得分:0)

这是vadim_hr解决的解决方案

//WORKING INSERT METHOD
void insertFirst(Node* r, char* word, int count){
   if(find(r, word)){
       struct Node* temp = find(r,word);
       temp->count += 1;
   }
   else{
      struct Node *link = (struct Node*) malloc(sizeof(struct Node));
      link->word = malloc(strlen(word)+1);
      strcpy(link->word, word);
      link->count = count;
      link->next = r->head;
      r->head = link;
   }
}