本文目錄一覽:
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、解答問題的辦法非常多,可以選擇通過拍照來答題,也可以選擇輸入題目來解答。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/254325.html