在LinkedList中搜索元素

时间:2017-02-26 04:16:11

标签: c

我目前正在创建用户输入的字符串链接列表。截至目前,我的链表工作正常(我只需要释放内存)。但是,我正在尝试在用户输入中检测逗号。如果有逗号,则链表打印出新行,并忽略逗号。

有什么建议吗?

例如:

输入字符串:

您好,世界,怎么样,是,你

目前的输出是:

你好,世界,如何,是,你

输出应为:

您好

世界

如何

这是我目前的代码:

#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;
}

1 个答案:

答案 0 :(得分:0)

要打印新行中的每个单词,您只需修改print语句以检查链接列表中的,字符。

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

试一试。