2017-02-26 127 views
0

我正在創建用戶輸入的字符串的鏈接列表。截至目前,我有我的鏈接列表工作(我只需要釋放內存)。但是,我試圖在用戶輸入中檢測逗號。如果有逗號,則鏈接列表會打印出一個新行,並忽略逗號。搜索LinkedList中的元素

有什麼建議嗎?

例如:

輸入一個字符串:

你好,世界,怎麼樣,是,你

輸出是目前:

你好,世界怎麼,是,你

輸出sh烏爾德是:

你好

世界

如何

這裏是我當前的代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 

struct Word 
{ 
    char* data; 
    struct Word* next; 
}; 

struct Word* ptr = NULL; 


void insert(char c) 
{ 
    struct Word* temp = (struct Word*)malloc(sizeof(struct Word)); 

    temp->data = c; 
    temp->next = NULL; 

    if (ptr) { 
     struct Word* temp1 = ptr; 

     while(temp1->next != NULL) { 
      temp1 = temp1->next; 
     } 

     temp1->next = temp; 

    } else { 
     ptr = temp; 
    } 

} 

void print() { 

    struct Word *temp; 
    temp = ptr; 

    while(temp != NULL) { 

     printf("%c", temp->data); 
     temp = temp->next; 

    } 

    printf("\n"); 

} 

int main(int argc, char *argv[]) 
{ 
    int c; 

    printf("enter a string\n"); 
    while (((c=getchar())!=EOF) && c!='\n') { 
     insert((char)c); 
    } 

    print(); /*print the list*/ 
    return 0; 
} 
+0

你爲什麼要使用pointer-to-char來存儲一個簡單的char!這個答案也很明顯是錯誤的,因爲它沒有指示做正確的事情:'char * data'應該是'char data',現在代碼中充滿了未定義的行爲 - 您應該編譯時啓用所有警告! –

回答

0

要打印新行中的每個單詞,只需修改打印語句以檢查鏈接列表中的,字符。

void print() { 

struct Word *temp; 
temp = ptr; 
char c; 

while(temp != NULL) { 

    if (temp->data == ',') { 
     printf("\n"); 
     temp = temp->next; 
    } else { 
     printf("%c", temp->data); 
     temp = temp->next; 
    } 

} 

    printf("\n"); 

} 

這將檢查是否有在鏈表,和打印\n打印換行符,並移動到下一個節點。

此外,您應該在程序完成後釋放鏈接列表以避免內存泄漏。

void freeData(struct Word* head) 
{ 
    struct Word* tmp; 

    while (head != NULL) 
    { 
     tmp = head; 
     head = head->next; 
     free(tmp); 
    } 

} 

Code link

只是嘗試一下。

+0

當你認爲這不是那麼簡單....恩,非常感謝!編譯時聲明一條警告消息:比較temp-> data ==','....上的新if語句的指針和整數。 – Karth

+0

@Ayush wat,不! –

+0

@Karth修復錯誤,您必須將'data'聲明爲'char',而不是'char *'。這也是由於其他因素造成的,所以您不需要指針來存儲單個字符,也不會爲指針char * data存儲alloc()內存。 – linuxfan