您的位置:

c语言网络引擎搜索,c++搜索引擎

本文目录一览:

c语言索引搜索如何建立索引表?

#include cstdlib

#include cstdio

#include iostream

#include cmath

#include cstring

#include algorithm

#include stdlib.h

#include direct.h

#include string.h

#include io.h

#include stdio.h

#include iostream

#include windows.h

#include time.h

using namespace std;

FILE *p;

void md(long long int m)

{

long long int shi,fen,miao,hmiao; 

hmiao=m%3600000;

m=m/1000;

if(m/360024)

{

shi = m/3600;

fen = m/60%60;

miao = m%60;

coutendl"换算等于"shi"时:"fen"分:"miao"秒:"(hmiao-miao*1000)"毫秒"endl;

else printf("输入数值太大"); 

}

class CBrowseDir

{

protected:

char m_szInitDir[_MAX_PATH];

public:

CBrowseDir();

bool SetInitDir(const char *dir);

bool BeginBrowse(const char *filespec);

protected:

bool BrowseDir(const char *dir,const char *filespec);

virtual bool ProcessFile(const char *filename);

virtual void ProcessDir(const char *currentdir,const char *parentdir);

};

CBrowseDir::CBrowseDir()

{

getcwd(m_szInitDir,_MAX_PATH);

int len=strlen(m_szInitDir);

if (m_szInitDir[len-1] != '\\')

strcat(m_szInitDir,"\\");

}

bool CBrowseDir::SetInitDir(const char *dir)

{

if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)

return false;

if (_chdir(m_szInitDir) != 0)

return false;

int len=strlen(m_szInitDir);

if (m_szInitDir[len-1] != '\\')

strcat(m_szInitDir,"\\");

return true;

}

bool CBrowseDir::BeginBrowse(const char *filespec)

{

ProcessDir(m_szInitDir,NULL);

return BrowseDir(m_szInitDir,filespec);

}

bool CBrowseDir::BrowseDir(const char *dir,const char *filespec)

{

_chdir(dir);

long hFile;

_finddata_t fileinfo;

if ((hFile=_findfirst(filespec,fileinfo)) != -1)

{

do

{

if (!(fileinfo.attrib  _A_SUBDIR))

{

char filename[_MAX_PATH];

strcpy(filename,dir);

strcat(filename,fileinfo.name);

puts(filename);

fputs(filename,p); 

fprintf(p,"\n"); 

if (!ProcessFile(filename))

return false;

}

} while (_findnext(hFile,fileinfo) == 0);

_findclose(hFile);

}

_chdir(dir);

if ((hFile=_findfirst("*.*",fileinfo)) != -1)

{

do

{

if ((fileinfo.attrib  _A_SUBDIR))

{

if (strcmp(fileinfo.name,".") != 0  strcmp

(fileinfo.name,"..") != 0)

{

char subdir[_MAX_PATH];

strcpy(subdir,dir);

strcat(subdir,fileinfo.name);

strcat(subdir,"\\");

ProcessDir(subdir,dir);

if (!BrowseDir(subdir,filespec))

return false;

}

}

} while (_findnext(hFile,fileinfo) == 0);

_findclose(hFile);

}

return true;

}

bool CBrowseDir::ProcessFile(const char *filename)

{

return true;

}

void CBrowseDir::ProcessDir(const char 

*currentdir,const char *parentdir)

{

}

class CStatDir:public CBrowseDir

{

protected:

long long int m_nFileCount;   

long long int m_nSubdirCount; 

public:

CStatDir()

{

m_nFileCount=m_nSubdirCount=0;

}

int GetFileCount()

{

return m_nFileCount;

}

int GetSubdirCount()

{

return m_nSubdirCount-1;

}

protected:

virtual bool ProcessFile(const char *filename)

{

m_nFileCount++;

return CBrowseDir::ProcessFile(filename);

}

virtual void ProcessDir

(const char *currentdir,const char *parentdir)

{

m_nSubdirCount++;

CBrowseDir::ProcessDir(currentdir,parentdir);

}

};

int main()

{

int DiskCount = 0;

DWORD DiskInfo = GetLogicalDrives();

while(DiskInfo)

{

if(DiskInfo1)

{

++DiskCount;

}

DiskInfo = DiskInfo  1;

}

cout"逻辑磁盘数量:"DiskCountendl;

int DSLength = GetLogicalDriveStrings(0,NULL);

char* DStr = new char[DSLength];

GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);

int DType;

int si=0;

BOOL fResult;

unsigned long long int i64FreeBytesToCaller;

unsigned long long intTotalBytes;

unsigned long long int i64FreeBytes;

unsigned long long int i64TotalBytes;

int g=0,k=0;

char name[100];

for(int i=0; iDSLength/4; ++i)

{

char dir[5]= {DStr[si],':','\\'};

coutdir;

DType = GetDriveType(DStr+i*4);

if(DType == DRIVE_FIXED)

{

cout"硬盘";

name[k]=DStr[si];

k++;

g++;

}

else if(DType == DRIVE_CDROM)

{

cout"光驱";

}

else if(DType == DRIVE_REMOVABLE)

{

cout"可移动式磁盘";

}

else if(DType == DRIVE_REMOTE)

{

cout"网络磁盘";

}

else if(DType == DRIVE_RAMDISK)

{

cout"虚拟RAM磁盘";

}

else if (DType == DRIVE_UNKNOWN)

{

cout"未知设备";

}

fResult = GetDiskFreeSpaceEx (dir,(PULARGE_INTEGER)i64FreeBytesToCaller,(PULARGE_INTEGER)i64TotalBytes,(PULARGE_INTEGER)i64FreeBytes);

if(fResult)

{

if((i64TotalBytes/1024/1024)1024)

  cout" 磁盘大小:"(float)i64TotalBytes/1024/1024/1024" GB";

 else

   cout" 磁盘大小:"(float)i64TotalBytes/1024/1024" MB";

if((i64FreeBytesToCaller/1024/1024)1024)

  cout" 剩余空间:"(float)i64FreeBytesToCaller/1024/1024/1024" GB";

 else

   cout" 剩余空间:"(float)i64FreeBytesToCaller/1024/1024" MB";

}

else

{

cout" 设备未准备好或启用了系统加密!";

}

if(!fResult)

  {

   k--;

  }

coutendl;

si+=4;

}

cout"共有硬盘"g"块"endl;

g=k+1;

cout"共有未加密的硬盘"g"块"endl;

cout"正在启动索引程序"endl; 

int i;

p=fopen("list.txt","a+");

if(g==1)

  {

   cout"您只有一个c盘"endl;

   cout"检测C盘可能会让程序崩溃"endl;

  } 

clock_t start,finish;

    start=clock();

for(i=1;ig;i++)

   {

    fprintf(p,"%c盘内的文件如下\n",name[i]);

char buf[6] = {name[i],':','\\'};

    CStatDir statdir;

statdir.SetInitDir(buf);

        statdir.BeginBrowse("*.*");

        fprintf(p,"文件总数: %d\n子目录总数:%d\n",statdir.GetFileCount(),statdir.GetSubdirCount());

        printf("文件总数: %d\n子目录总数:%d\n",statdir.GetFileCount(),statdir.GetSubdirCount());

   }

cout"全部完成"endl;

finish=clock();

cout"用时"(finish-start)"毫秒";

md(finish-start); 

return 0;

}

C语言编写的小型的搜索引擎

建议你先读懂lucene的源代码后再动手写。而且,最好用php、perl之类的脚本语言,处理字符串比较方便,c语言的话比较麻烦点。

C语言如何用函数来实现搜索

#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=0;im;i++)

    {

        scanf("%d",a[i]);

    }

    for(i=0;im;i++)

    {

        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;

}

这种查找方法的数组必须是从小到大的,用遍历的话就没这个问题了。

全文检索工具有哪些?

1. Lucene

Lucene的开发语言是Java,也是Java家族中最为出名的一个开源搜索引擎,在Java世界中已经是标准的全文检索程序,它提供了完整的查询引擎和索引引擎,没有中文分词引擎,需要自己去实现,因此用Lucene去做一个搜素引擎需要自己去架构.另外它不支持实时搜索,但linkedin和twitter有分别对Lucene改进的实时搜素. 其中Lucene有一个C++移植版本叫CLucene,CLucene因为使用C++编写,所以理论上要比lucene快.

2. Sphinx

Sphinx是一个用C++语言写的开源搜索引擎,也是现在比较主流的搜索引擎之一,在建立索引的事件方面比Lucene快50%,但是索引文件比Lucene要大一倍,因此Sphinx在索引的建立方面是空间换取事件的策略,在检索速度上,和lucene相差不大,但检索精准度方面Lucene要优于Sphinx,另外在加入中文分词引擎难度方面,Lucene要优于Sphinx.其中Sphinx支持实时搜索,使用起来比较简单方便.

3. Xapian

Xapian是一个用C++编写的全文检索程序,它的api和检索原理和lucene在很多方面都很相似,算是填补了lucene在C++中的一个空缺.

4. Nutch

Nutch是一个用java实现的开源的web搜索引擎,包括爬虫crawler,索引引擎,查询引擎. 其中Nutch是基于Lucene的,Lucene为Nutch提供了文本索引和搜索的API.

对于应该使用Lucene还是使用Nutch,应该是如果你不需要抓取数据的话,应该使用Lucene,最常见的应用是:你有数据源,需要为这些数据提供一个搜索页面,在这种情况下,最好的方式是直接从数据库中取出数据,并用Lucene API建立索引.

5. DataparkSearch

DataparkSearch是一个用C语言实现的开源的搜索引擎. 其中网页排序是采用神经网络模型. 其中支持HTTP,HTTPS,FTP,NNTP等下载网页.包括索引引擎,检索引擎和中文分词引擎(这个也是唯一的一个开源的搜索引擎里有中文分词引擎).能个性化定制搜索结果,拥有完整的日志记录.

6. Zettair

Zettair是根据Justin Zobel的研究成果为基础的全文检索实验系统.它是用C语言实现的. 其中Justin Zobel在全文检索领域很有名气,是业界第一个系统提出倒排序索引差分压缩算法的人,倒排列表的压缩大大提高了检索和加载的性能,同时空间膨胀率也缩小到相当优秀的水平. 由于Zettair是源于学术界,代码是由RMIT University的搜索引擎组织写的,因此它的代码简洁精炼,算法高效,是学习倒排索引经典算法的非常好的实例. 其中支持linux,windows,mac os等系统.

7. Indri

Indri是一个用C语言和C++语言写的全文检索引擎系统,是由University of Massachusetts和Carnegie Mellon University合作推出的一个开源项目. 特点是跨平台,API接口支持Java,PHP,C++.

来自网络。

有什么软件可以搜索大学C语言题目的啊?

大学c语言搜题app。大学c语言搜题app原名叫做菜鸟学C语言是一款非常好用的学习c语言的手机软件

软件功能

1、选择题:按照考点分类的选择题习题,并有答案解析。

2、错题库:可自动加练习过程中错题加入收藏,以便反复练习。

3、上机操作题:300道上机操作题,程序填空题、程序修改题、程序设计题。

软件优势

1、选择题:按照考点分类的选择题习题,并有答案解析。

2、上级操作题:300道上机操作题,程序填空题、程序修改题、程序设计题。

3、最新押题:最新考试押题3套。

4、考点汇总:包含复习的考点。

5、错题库:可自动加练习过程中错题加入收藏,以便反复练习。

6、收藏夹:可在练习过程中自行收录题目到收藏夹,形成自己的小题库,针对性练习,提高通过率。

软件特色

1、随时随地都能够学习,而且还支持下载保存你学习内容离线继续学习。

2、同学们能够直接通过搜索引擎来查询寻找你感兴趣对你内容。

3、解答问题的办法非常多,可以选择通过拍照来答题,也可以选择输入题目来解答。