㈠ 关于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赋值为该块内第一个元素的起始位置
然后进一步查到元素