我目前正在创建用户输入的字符串链接列表。截至目前,我的链表工作正常(我只需要释放内存)。但是,我正在尝试在用户输入中检测逗号。如果有逗号,则链表打印出新行,并忽略逗号。
有什么建议吗?
例如:
输入字符串:
您好,世界,怎么样,是,你
目前的输出是:
你好,世界,如何,是,你
输出应为:
您好
世界
如何
是
在
这是我目前的代码:
#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 :(得分: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);
}
}
试一试。