我开始研究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
答案 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;
}
}