2013-10-21 60 views
0

我有一個鏈接列表,其中包含兩個「字符串」,一個用於搜索,另一個用於替換。我還有一個文本文件,我應該打開並逐行閱讀,然後查看單詞是否存在於「詞典」(鏈接列表)中,如果是這樣,我必須將其替換爲單詞的定義。然後將更改後的文本寫入新的文本文件,所以我認爲在閱讀時應該使用緩衝區。 問題是,我不知道如何遍歷鏈表。到目前爲止,我有這兩個詞,但它只能搜索第一個循環中:迭代C中的鏈接列表

char *textLine = NULL; 
size_t textlen = 0; 
ssize_t readText; 
struct node *n = malloc(sizeof(*n)); 
n = head; 
char buffer[MAX_L]; 
while((readText = getline(&textLine, &textlen, t)) != -1) { 

char *t = strtok(textLine, " "); 

while (t != NULL) 
{ 
    if(strcmp(t,n->word) == 0) 
    { 
     // do something 
    } 
    else 
    { 
     // do something 
    } 
    n = head; 
    t = strtok(NULL, " "); 
} 
} 

「頭」是空的,我想這就是爲什麼它只是搜索的第一個字我真的不知道如何遍歷行和鏈表。

+1

不應該在內部'while'循環內有某種'n = n-> next;'賦值或類似的操作。而不是僅僅做'n = head'。 –

回答

2

具體來說,遍歷鏈表的方式在某種程度上取決於其接口。

沒有與您正在使用的特定實現的接口,問題很難回答;但通常;鏈表看起來是這樣的:

typedef struct list_node ListNode; 

struct list_node { 
    void *payload; 
    ListNode *next; 
} 

迭代通常是由以下的next指針完成,只要它不是NULL;(總是?)像這樣:

void iterate (ListNode *head) { 
    while (head) { 
    if (interested_in_payload(head->payload)) { 
     // do stuff 
    } 

    head = head->next; 
    } 
} 
1

此:

struct node *n = malloc(sizeof(*n)); 
n = head; 

看起來很嚇人。首先分配一些內存幾乎是不對的,然後立即覆蓋指針。

也許你的意思是

head = n; 

+0

從不是一個危險的詞。就個人而言,我可能會在這個案例中使用「not」,對於更一般的概念,「很少」。 (奇怪的事情發生在嵌入式編程中。) –

+1

@WillihamTotland嗯......是的,好吧,爲什麼不呢,我做到了「幾乎從不」。 :) – unwind