gpt4 book ai didi

c - 读取字符串到链表

转载 作者:行者123 更新时间:2023-11-30 15:42:56 24 4
gpt4 key购买 nike

我必须编写一个程序,将用户输入的字符串存储到链接列表中,然后反向打印它 - 例如,如果用户输入 Hello。输出应该是.olleH。

我不太了解列表的全部概念,但我想出了一些东西,非常感谢任何反馈。

typedef struct L {
char c;
struct L *next;
}List;

List *getInput( void ) {
List *t = calloc(1, sizeof(List));
int i;
for (i=0; getchar() != '.'; i++) {
t->c = getchar();
t->next = NULL;
printf("%c", t->c);
t = t->c;
t->next = t->next->next;
}
return t;
}

int main ( void ) {
getInput();
return 0;
}

现在我只是尝试使用 getchar() 将其逐个字符存储在列表 t 中。然后我想使用另一个 for 循环向后计数来打印它。由于某些原因,它不起作用,而我(没有完全理解列表的概念)无法弄清楚为什么。

感谢任何帮助的人!

最佳答案

当您想要反向打印输入字符串时,最简单的方法是以相反的顺序将字符串存储在链接列表中,即在读取字符到列表的开头(“头”)时添加字符。因此,开始的列表将为空,然后它将包含“H”,然后是“eH”,“leH”等等。这是 samblo 代码:

List *getInput(void)
{
List *l = NULL; // list head, we'll prepend nodes here
int c; // variable for current read character

while ((c = getchar()) != EOF) { // read characters one by ine, until end-of-file
List *n = calloc(1, sizeof(List)); // create new list node
n->c = c; // store read character in that node
n->next = l; // prepend newly created node to our list
l = n; // store newly created node as head of list
}

return l;
}

打印列表的方法如下:

void printList (List *l)
{
while (l != NULL) { // while we have not reached end of list
putchar(l->c); // print character stored in list
l = l->next; // and advance to next list node
}
}

关于c - 读取字符串到链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20010289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com