问题补充:二楼的是死循环运行不了啊
=====================================
实在抱歉,之前疏忽了,现在已经改好了,再试一下吧:)
=====================================
问题补充:二楼的幸苦了,仔细看了一下你的,好像有点出入,不是自己输入文章,是打开已有文章。还得麻烦你稍稍修改下。谢谢哈
=====================================
根据你的要求,又改了一版,现在已经改好了,再试一下吧:)
给:
#include<stdio.h>
#include<string.h>
#define MAX_size 1000
int flag=1,degree=0
void Index(char str[],char word[],int position[])
{
int i,len_str,len_word,pos_str,pos_word,k=0,word_number=0//word_number代表短文中单词的个数
len_word=strlen(word)
len_str=strlen(str)
for(i=0i<len_stri++)
{
while(str[i]==' '||str[i]==','||str[i]=='.')
i++
word_number++//单词个数加一
for(pos_str=i,pos_word=0pos_str<len_str &&pos_word<len_wordpos_str++,pos_word++)
{
if(str[pos_str]!=word[pos_word])
break
}
if(pos_word==len_word &&(str[pos_str]=='\0'|| str[pos_str]==' '||str[pos_str]==','||str[pos_str]=='.')) //表明找到相等的单词
{
position[k++]=word_number
degree++//相等的次数加1
flag=0
}
else
{
while(str[pos_str]!=' '&&str[pos_str]==','&&str[pos_str]=='.'&&pos_str<len_str)
pos_str++
}
i=pos_str
}
}
void main()
{
char str[MAX_size],word[20],ch
int position[100],i
int k=0
FILE *fp
if((fp=fopen("a.txt","r"))!=NULL)
{
while(1)
{
ch=fgetc(fp)
if(ch==EOF) break
str[k]=ch
k++
}
}
printf("请输入要检索的单词: \n")
gets(word)
Index(str,word,position)
if(flag)
printf("您输入的单词不在短文中。\n")
else
{
printf("您输入的单词在短文中,它共出现 %-d 次\n",degree)
printf("出现的位置为: \n")
for(i=0i<degreei++)
printf("第%-2d个单词\n",position[i])
}
fclose(fp)
}
#include <stdio.h>int search(int a[],int b,int c,int i)
{
int x,y,z
x=i+1
z=b-1
y=(x+z)/2
while(x<=z)
{
if(a[y]>c)
{
z=y-1
y=(x+z)/2
continue
}
if(a[y]<c)
{
x=y+1
y=(x+z)/2
continue
}
return y+1
}
return -1
}
int main()
{
int i,m,pos
scanf("%d",&m)
int a[m]
for(i=0i<mi++)
{
scanf("%d",&a[i])
}
for(i=0i<mi++)
{
pos=search(a,m,a[i],i)
if(pos!=-1)
{
printf("FOUND a[%d]=%d, position is %d\n",i,a[i],i+1)
return 0
}
}
if(pos==-1)
{
printf("NOT FOUND\n")
}
return 0
}
这种查找方法的数组必须是从小到大的,用遍历的话就没这个问题了。
个人觉得完全用C语言去做一个搜索引擎,是能办到,但是成本会很高。首先我们来看一个通用的搜索引擎需要哪些模块。
一.网络爬虫
要用C语言去做一个爬虫系统,成本会非常高,很多东西都需要自己实现。而爬虫系统,个人觉得Python的Scrapy框架是一个很好的选择,从网页爬取到数据存入数据库有一条完整的链路。爬虫系统对性能的要求不高,Python完全可以胜任。
二.倒排索引
倒排索引主要包括索引建立和索引更新。索引的数据结构以及一些算法,用C语言完全可以的,在线索引实时更新通过C语言实现效率也能高一些。
三.检索模型
如果只需要做一个简单的检索系统,直接BM25算法就可以了。如果系统比较复杂,考虑到线上效果,那么需要结合机器学习模型或深度学习模型,考虑到检索相关性,有很多复杂的设计。不过在线部分完全可以通过C语言实现。
一般来说,做一个搜索引擎需要根据不同的模块情况而选择不同的语言实现,充分发挥各种语言的优势即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)