问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言-数据结构-删除句子中重复的单词

发布网友 发布时间:2022-04-24 17:19

我来回答

1个回答

热心网友 时间:2023-05-15 03:01

#include <stdio.h>
#include <malloc.h>
#define WORDSIZE 20
typedef struct Node
{
char ch[WORDSIZE];
struct Node *next;
}WordNode;WordNode *NodeCreate(char *str)
{
WordNode *head=NULL, *p=NULL, *q=NULL;
int i=0;
q=head=(WordNode*)malloc(sizeof(WordNode));
while(*str!='\0')
{
p = (WordNode*)malloc(sizeof(WordNode));
if(p)
{
while(*str!=' ' && *str!= '\0')
p->ch[i++] = *str++;
p->ch[i]='\0';
q->next = p;
p->next=NULL;
q=p;
i=0;
if(*str)
str++;
}
}
return head;
}
void Find(WordNode *head, char *str)
{
WordNode *p=head->next;
int i, flag;
while(p)
{
for(i=0,flag=0;str[i]==p->ch[i]; i++)
if(str[i]=='\0')
flag = 1;
if(flag)
break;
p=p->next;
}
if (flag)
printf("存在!\n");
else
printf("不存在!\n");
}int cmp(char *p1, char *p2)
{
int i;
for(i=0;p1[i]==p2[i]; i++)
if(p1[i]=='\0')
return 0;
return *p1-*p2;
}
void RemoveDuplicates(WordNode *head)
{
WordNode *p = head->next;
char *temp;
while (p != NULL)
{
temp = p->ch;
WordNode *pBefore = p;
WordNode *deleteMe = p->next;

while (pBefore->next != NULL)
{
if (cmp(deleteMe->ch,temp)==0)
{
pBefore->next = deleteMe->next;
free(deleteMe);
deleteMe = pBefore->next;
}
else
{
pBefore = pBefore->next;
deleteMe = pBefore->next;
}
}
p = p->next;
}
}void Sort(WordNode *head)
{
WordNode *p,*q,*r,*s;
r=(WordNode*)malloc(sizeof(WordNode));
r=head;
for(s=head->next;s->next;s=s->next)
{
p=s; q=p->next;
while(q)
{
if(cmp(p->ch,q->ch)>0)
{
if(p==head->next)
{
p->next=q->next;
q->next=p;
head->next=q;
q=p->next;
}
else
{
r->next=q;
p->next=q->next;
q->next=p;
r=q;q=p->next;
}
}
else
{
r=r->next;
p=p->next;
q=q->next;
}

}
r=s;
}
} void Print(WordNode *head)
{
WordNode *p=head->next;
while(p)
{
printf("%s ",p->ch);
p = p->next;
}
printf("\n");
}
int main(void)
{
char str[100];
WordNode *head=NULL;
gets(str);
head = NodeCreate(str);
printf("产生的单词列表:\n");
Print(head);
printf("请输入要查找的单词:");
scanf("%s",str);
Find(head, str);
RemoveDuplicates(head);
printf("删除重复的单词后:\n");
Print(head);
Sort(head);
printf("排序后的单词:\n");
Print(head);
return 0;
}
运行后:
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 C语言题目任意输入一个文件,统计其中单词出现的次数,并按序排序,给出前20个单词的列表及其出现次数。 Verilog通过文件去定义管脚? 如何实现网页表格中一行多出的文字变成省略号或者隐藏 c语言字符串匹配问题 c语言翁凯期末考试字数统计编程答案 数据类型的级别在C语言中有什么实质性的用处? 100悬赏翻译 100悬赏翻译! 本文标题的作用 本文标题的作用 详写泥墙根一带的无线乐趣,特别是详写拔何首乌,其作用是什么? 详写泥墙根一带的无线乐趣,特别是详写拔何首乌,其作用是什么? 《从百草园到三味书屋》文中对描写拔何首乌的根的描写,表现了作者怎样的心理?这样写有什么作用》 《从百草园到三味书屋》文中对描写拔何首乌的根的描写,表现了作者怎样的心理?这样写有什么作用》 从百草园到三味书屋描写拔何首乌根的作用是什么 作业啊 描写拔菜动作的词语 描写拔菜动作的词语 Google Android开发入门与实战的作品目录 请问,描写拔花生和摘花生的优美句子都有那些?越多越好急!!!!! 帮我写拔钟的写十个,帮帮忙了 如何产生依赖文件 Linux C programming 微软雅黑如何用自己的程序加载上? 用C语言编程实现学生基本信息管理系统 求一个CRC校验C++源代码。题目:发送数据为1101011011,生成的多项式为P(X)=X4+X+1(X4为X的4次方), C语言动态链表,改写程序,学生的人数由用户输入获得,使用链表实现。用malloc和free动态申请和释放内存 在access中的”OLE对象”字段存储形式为二进制? c语言怎样才能输出中文???(最简单的方法) 请问网页制作中点击网站里的大字能让字体变大,点击小字能让字体变小怎么做........ VHDL语言里的For循环 怎样在阿里巴巴上怎样申请知识产权 阿里巴巴产品被人投诉知识产权侵权怎么办? 按投资项目之间的相互关系,投资可以分为哪三类? 阿里巴巴知识产权认证和淘宝认证不是同一个人怎么办? 雷士照明灯泡,创始人如何处理与投资者的关系? 阿里巴巴版权。知识产权审核未通过? 如何理解“投资者(控股股东)及其一致行动人”? 阿里代运营知识产权是什么意思 关于上市公司的投资者关系管理的问题 阿里巴巴知识产权验证很慢,但是我还需要投诉怎么办? 融资完成之后,创业者该如何处理自己与投资人的关系?