㈠ 關於c語言中文件搜索函數。
函數名: findfirst(); findnext ();
功 能: 搜索磁碟目錄; 取得下一個匹配的findfirst模式的文件 ;
用 法:
int findfirst(char *pathname, struct ffblk *ffblk, int attrib);
int findnext(struct ffblk *ffblk);
舉例:
/* findnext example */
#include <stdio.h>
#include <dir.h>
int main(void)
{
struct ffblk ffblk;
int done;
printf("Directory listing of *.*\n");
done = findfirst("*.*",&ffblk,0);
while (!done)
{
printf(" %s\n", ffblk.ff_name);
done = findnext(&ffblk);
}
㈡ 如何編寫二分查找和順序查找的C語言代碼
二分查找:
int search(int a[],int x,int n)
{
int mid=0;
int low=0;
int high=n;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x)
{ return mid; }
else if(x<a[mid])
{ high=mid-1; }
else
{ low=high+1; }
}
return -1;
}
順序查找:
int search(int a[],int x,int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[i]==x)
return i;
else
return -1;
}
}
㈢ c語言中如何在一個字元串里搜索出其中的字母和數字啊謝謝
那大概就是這樣
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main(){
char str[1000]; //字元串
memset(str,1000,0);
scanf("%s",str);
char ch;
int pos1(0),pos2(0);
char s1[500],s2[500];
memset(s1,500,0);
memset(s2,500,0);
for(int i=0;i<strlen(str);i++){
ch=str[i];
if(ch<='9'&& ch>='0'){ //統計數字個數
s1[pos1++]=ch;
}
if( (ch<='z'&&ch>='a') ||(ch>='A'&&ch<='Z') ){
s2[pos2++]=ch;
}
}
printf("%s\n",s1);
printf("%s\n",s2);
system("pause");
return 0;
}
㈣ C語言,如何實現搜索內存數據
一般的講,內存里邊雖然說有*G的空間,但有些地方只是掛名存在,實際上是不存在的,所以訪問了就會出錯,所以就要判斷內存是不是為有效地址,
就要用到VirtualQuery獲取指定內存屬性, 根據屬性來判斷能不能進行讀取,
如果能讀取就從調用VirtualQuery中得到的內存信息minfo中獲取當前內存地址的有效區域的大小,然後再進行讀取. 你可以用VC調試來看看,不能訪問的內存就用?號來表示.由於搜所內存是一種運算量龐大的工作,所以,在對比處理要作速度優化處理. 如果數據大於4位元組,請用 long 的數據格式來作對比運算, long 是 char 的處理速度的三倍以上,(個人測試的) 用long處理前端數據,再用 char 作收尾工作. 這是對比處理了.流程就有以下:
判斷地址的有效性->定好搜所范圍->進行對比->輸出結果.
StartAdd 開始地址
EndAdd 結束地址
Data 查找的數據
DataSize 數據大小
void *FindMemory(DWORD StartAdd,DWORD EndAdd,void *Data,DWORD DataSize)
{
MEMORY_BASIC_INFORMATION minfo;
DWORD rt;
while(StartAdd<EndAdd)
{
::VirtualQuery((void*)StartAdd,&minfo,sizeof(MEMORY_BASIC_INFORMATION));
if(minfo.AllocationProtect)
if(minfo.State==MEM_COMMIT||minfo.State==MEM_FREE)
{
char *s=(char*)StartAdd,*e=s+minfo.RegionSize;
for(;s<e&&s+DataSize<=e;s++)
if(memcmp(s,Data,DataSize)==0)
return s;
}
StartAdd=(DWORD)minfo.BaseAddress+minfo.RegionSize;
}
return 0;
}
㈤ c語言中有三分查找法嗎
這個呀,樓主很有創造力,其實演算法都是人設計的嘛,你想有就可以有的。
具體思想應該跟二分查找法差不多吧。給出n個已經排好序的數,在n/3和2n/3處各取一個數,跟待查的數比較,確定待查數所在的范圍。編程復雜度應該比二分法大一些,因為需要考慮的情況很多,所以我就不寫了。時間復雜度上,應該是一樣大,系數在理想情況下三分法的平均值可能略好一些些(1和0.95的區別),但實際上,由於三分法需要考慮的情況很多,很難寫出一個簡潔的代碼,很可能比二分法差。
㈥ C語言如何用函數來實現搜索
#include<stdio.h>
intsearch(inta[],intb,intc,inti)
{
intx,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;
}
returny+1;
}
return-1;
}
intmain()
{
inti,m,pos;
scanf("%d",&m);
inta[m];
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<m;i++)
{
pos=search(a,m,a[i],i);
if(pos!=-1)
{
printf("FOUNDa[%d]=%d,positionis%d ",i,a[i],i+1);
return0;
}
}
if(pos==-1)
{
printf("NOTFOUND ");
}
return0;
}
這種查找方法的數組必須是從小到大的,用遍歷的話就沒這個問題了。
㈦ C語言中怎樣實現查找功能
可以用結構體 把一個人的信息定義成結構體的變數 輸入姓名後在結構體數組查找 匹配時輸出對應的所有信息
很好實現的
㈧ C語言編程:三分加密
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
intThree_Parties(char*data,intdata_length)
{
typedefunsignedcharUCHAR;
inti,index;
char*dict;
UCHAR*polybius_index;
//檢查訊息的合法性
for(i=0;i<data_length;i++)
{
if(data[i]>='a'&&data[i]<='z')
{
//小寫轉化為大寫
data[i]&=0xDF; //小寫字母第5位置為0即變為大寫
//data[i]-='a'-'A';//這種寫法也可以,但沒有上一種效率高
}
elseif(data[i]<'A'||data[i]>'Z')
{
//包含非字母的字元
return1;
}
}
dict="LEOCBFQSTNARGHJUWXDVIKMPYZ/";
polybius_index=(UCHAR*)malloc(3*data_length);
for(i=0;i<data_length;i++)
{
index=strchr(dict,data[i])-dict;
polybius_index[i]=index/9;
index%=9;
polybius_index[i+data_length]=index/3;
polybius_index[i+2*data_length]=index%3;
}
for(i=0;i<3*data_length;i+=3)
{
index=polybius_index[i]*9+polybius_index[i+1]*3+polybius_index[i+2];
data[i/3]=dict[index];
}
free(polybius_index);
return0;
}
intmain(intargc,char*argv[])
{
chardata[]="helloworld";
if(Three_Parties(data,strlen(data))==0)
{
printf("%s",data);
}
else
{
printf("inputerror");
}
return0;
}
//加密部分還可以改成建索引表,那樣效率會更高,但代碼稍微復雜些。
㈨ c語言搜索代碼
/*寬度優先搜索*/
#define Adj 1
#define Unadi 0
#define N 6
typedef struct
{int Number[N];
int front;
int rear;
}Queue,*pQueue;
void InitQueue(pQueue q)
{q->front=0;
q->rear=0;
}
void EnQueue(pQueue q,int number)
{int rear;
rear=(q->rear+1)%N;
if(rear==q->front)
{printf("The Queue is full,cannot enter the queue.");
}
else
{q->Number[q->rear]=number;
q->rear=rear;
}
}
int OutQueue(pQueue q)
{int number;
if(q->front==q->rear)
{printf("The Queue is empty.");
return -1;
}
number=q->Number[q->front];
q->front=(q->front+1)%N;
return number;
}
int Isempty(pQueue q)
{if(q->front==q->rear)return 1;
else return 0;
}
void BFSTraverse(int v,int (*a)[6],int *dist,int *prev)
{Queue q;
int number,i;
int s[N];
InitQueue(&q);
for(i=1;i<N;i++)
s[i]=0;
s[v]=1;
prev[v]=v;
dist[v]=0;
EnQueue(&q,v);
while(!Isempty(&q))
{ number=OutQueue(&q);
for(i=1;i<N;i++)
{if(!s[i]&&a[number][i]==Adj)
{dist[i]=dist[number]+1;
prev[i]=number;
s[i]=1;
EnQueue(&q,i);
}
}
}
}
main()
{int a[N][N];
int v,dist[N],prev[N],i,j,k;
printf("please input the relation of points:");
for(i=1;i<N;i++)
for(j=1;j<N;j++)
scanf("%d",&a[i][j]);
printf("Please input the number of initial point:");
scanf("%d",&v);
BFSTraverse(v,a,dist,prev);
for(i=1;i<N;i++)
{printf("The %d number point's distant is:%d\n",i,dist[i]);
k=i;
while(k!=v)
{printf("%d<<--",k);
k=prev[k];
}
printf("%d\n",v);
}
}
寬度優先搜索需藉助隊列的幫助
2.深度優先搜索沒時間在再寫,抱歉
㈩ 分塊查找(C語言)
i=idx[low1].low是塊中第一個元素的起始位置的值
int blksearch(sqlist r,index idx,find=0,hb;) // bn為塊個數 //
{ int i,;low=1,high1=bn,midl,find=0,hb;
while(low1<=high1&&!find)
{mid=(low1+high1)/2;
if(k<idx[mid1].key)high1=mid-1;
else if(k>idx[mid1],key)low1=mid1+1;
else{
low=mid1;
find=1;
}
到這里是初步鎖定要查的元素在那個塊,找到大的方向後 在塊里進行進一步的搜索
if(low1<bn)//如果low1的值沒有超過塊的總個數
i=idx[low1].low; //i賦值為該塊內第一個元素的起始位置
然後進一步查到元素