本文目录一览:
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、解答问题的办法非常多,可以选择通过拍照来答题,也可以选择输入题目来解答。