我目前正在创建用户输入的字符串的链表。截至目前,我的链表正在运行(我只需要释放内存即可)。但是,我试图检测用户输入中的逗号。如果有逗号,请使链表打印出新的一行,而忽略逗号。

有什么建议吗?

例如:

输入一个字符串:

你好,世界,你如何,你

当前输出为:

你好,世界,你如何,你

输出应为:

你好

世界

怎么样





这是我当前的代码:

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

最佳答案

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

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

只是尝试一下。

关于c - 在链接列表中搜索元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42464685/

10-11 16:43