链表检索英语怎么说及英文单词
A. 英文文件相似度统计 C语言 最好用链表!
为什么不直接用数据库分析,分析数据当然是数据库最快最方便。回
你可以把两个文件,答批量替换,把空格,句号等都替换成逗号。
然后用数据库建立两张一样的表,只要2个字段就可以了,一个索引,一个单词。
然后用导入工具,直接将逗号分割的文件导入到数据库中的这两张表里。
然后用联查语句分析。
B. 求助!单向链表,输入多个英文单词,链表不保留重复出现的。最后统计单词出现次数。调试很久一直出问题
#include<stdafx.h>
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define maxsize 20
typedef struct node
{
int freg;//频度域,记单词出现的次数。
char word[maxsize];//maxsize是单词中可能含有的最多字母个数
struct node *next;
}node, *LinkedList;
LinkedList creat(int n) //建立有n(n>0)个单词的单向链表,若单词重复出现,则只在链表中保留一个。
{
//struct node *la;
LinkedList la;
la=(LinkedList)malloc(sizeof(node));//申请头结点。
la->next=NULL; //链表初始化。
node *p,*pre;
p=(node*)malloc(sizeof(node));
pre=(node*)malloc(sizeof(node));
char a[maxsize];
for(int i=1;i<=n;i++) //建立n个结点的链表
{
scanf("%s",a); //a是与链表中结点数据域同等长度的字符数组。
p=la->next;
pre=p; //p是工作指针,pre是前驱指针。
while(p!=NULL)
{
if(strcmp(p->word,a)==0) {p->freg++;break;} //如果输入单词重复出现,频度增1。
else {pre=p;p=p->next;}
}//指针后移。
if(p==NULL) //该单词没出现过,应插入。
{
p=(LinkedList)malloc(sizeof(node));
strcpy(p->word,a);//将键入的单词输入链表
p->freg=1;//统计该单词出现次数只有1
p->next=NULL;
pre=p;
} //将新结点插入到链表最后。
}//结束for循环。
return(la);
}//结束creat算法。
void CreatOut( int n)
//建立有n个单词的单向链表,重复单词只在链表中保留一个,最后输出频度最高的k个单词。
{
LinkedList la;
la=(LinkedList)malloc(sizeof(node));//申请头结点。
la->next=NULL; //链表初始化。
node *p,*pre,*q;
//p=la->next;pre=p; //p是工作指针,pre是前驱指针。
char a[maxsize];
for(int i=1;i<=n;i++) //建立n个结点的链表
{
scanf("%s",a); //a是与链表中结点数据域同等长度的字符数组。
p=la->next;
pre=la; //p是工作指针,pre是前驱指针。<========这里修改了
while(p!=NULL)
{
if(strcmp(p->word,a)==0)
{
p->freg++; //单词重复出现,频度增1。
pre->next=p->next; //先将p结点从链表上摘下,再按频度域值插入到合适位置
pre=la;
q=la->next;
while(q && q->freg>p->freg) //这里的循环··好像有点问题
{
pre=q;
q=q->next;
}
pre->next=p;
p->next=q;
break; // <=====这里修改了
}
else
{
pre=p;
p=p->next;
} //指针后移。
}
if(p==NULL) //该单词没出现过,应插入到链表最后。
{
p=(LinkedList)malloc(sizeof(node));
strcpy(p->word,a);
p->freg=1;
//la->next=p;
p->next=NULL;
pre->next=p; //调试到这里出错
}//if 新结点插入。
}//结束for循环建表。
int k,i=0;
scanf("%d",&k);
p=la->next;
while (p && i<k) //输出频度最高的k个单词
{printf("第%3d个单词%s出现%3d次\n",++i,p->word,p->freg);
p=p->next;
}
if (!p)
printf("给出的%d值太大\n",k);
}
void main()
{
printf("输入单词个数:");
int a;
scanf("%d",&a);
printf("输入单词个数:%d\n",a);
CreatOut(a);
return;
}
C. c语言用链表实现,统计一个英文文本文件中每个单词的出现次数(词频统计),结果按单词词典序输出到屏幕
#include <stdio.h>
#include <string.h>
int main(void)
{
int a = 0, b = 0, c = 0;
char buf[128];
FILE *fp;
/* 打开文件,文件名必须大写 */
fp= fopen("DATA5610.TXT", "r");
if (!fp) {
printf("No 'DATA5610.TXT' found.\n");
return -1;
}
/* 逐次读取单词,空格或回车分割 */
while (fscanf(fp, "%s", buf) > 0) {
/* 如读取到的单词是 if,则a自增 1 */
if (strcmp(buf, "if") == 0)
a++;
else if (strcmp(buf, "while") == 0)
b++;
else if (strcmp(buf, "for") == 0)
c++;
}
printf("if: %d, while: %d, for: %d\n", a, b, c);
fclose(fp);
return 0;
}
D. 编程从一篇英文文献读入字符串,分离单词,按指针数组加链表方式排序,构成单词表,并输出该英文文献与单
要分割单词,那文献肯定有规定格式,比如每个单词都用空格分割,你截取后插入链表的指定节点,这时就是个排序的过程。
E. 求程序,用c++设计,求一句话中英文单词的频度,用 串的匹配或者链表,怎么写啊,想要完整的程序,输
char*strstr(constchar*s1,constchar*s2)
{
intn;//字符串偏移
if(*s2)//如果第一个字符不是 ,就执行查找
{
while(*s1)//相当于*s1!='