Linux C 函数参考(数据结构及算法)
时间:2005-02-28 来源:prohorry
|
crypt(将密码或数据编码) |
相关函数 |
getpass |
表头文件 |
#define _XOPEN_SOURCE #include<unistd.h> |
定义函数 |
char * crypt (const char *key,const char * salt); |
函数说明 |
crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字 符组成的字符串,由a-z、A-Z、0-9,“.”和“/”所组成,用来决定使用4096 种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key 所指的字符串不会有所更动。编码过的字符串长度为13 个字符,前两个字符为参数salt代表的字符串。 |
返回值 |
返回一个指向以NULL结尾的密码字符串。 |
附加说明 |
使用GCC编译时需加-lcrypt。 |
范例 |
#include<unistd.h> main() { char passwd[13]; char *key; char slat[2]; key= getpass(“Input First Password:”); slat[0]=key[0]; slat[1]=key[1]; strcpy(passwd,crypt(key slat)); key=getpass(“Input Second Password:”); slat[0]=passwd[0]; slat[1]=passwd[1]; printf(“After crypt(),1st passwd :%s ”,passwd); printf(“After crypt(),2nd passwd:%s ”,crypt(key slat)); } |
执行 |
Input First Password: /* 输入test,编码后存于passwd[ ] */ Input Second Password /*输入test,密码相同编码后也会相同*/ After crypt () 1st Passwd : teH0wLIpW0gyQ After crypt () 2nd Passwd : teH0wLIpW0gyQ |
|
|
|
bsearch(二元搜索) |
相关函数 |
qsort |
表头文件 |
#include<stdlib.h> |
定义函数 |
void *bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void*,const void*)); |
函数说明 |
bsearch()利用二元搜索从排序好的数组中查找数据。参数key指向欲查找的关键数 据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素之间的大小关系,若传给compar 的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于0 的值,两个元素数据相等则回传0。 |
附加说明 |
找到关键数据则返回找到的地址,如果在数组中找不到关键数据则返回NULL。 |
范例 |
#include<stdio.h> #include<stdlib.h> #define NMEMB 5 #define SIZE 10 int compar(const void *a,const void *b) { return (strcmp((char *)a,(char *)b)); } main() { char data[50][size]={“linux”,”freebsd”,”solaris”,”sunos”,”windows”}; char key[80],*base ,*offset; int i, nmemb=NMEMB,size=SIZE; while(1){ printf(“>”); fgets(key,sizeof(key),stdin); key[strlen(key)-1]=’’; if(!strcmp(key,”exit”))break; if(!strcmp(key,”list”)){ for(i=0;i<nmemb;i++) printf(“%s ”,data[i]); continue; } base = data[0]; qsort(base,nmemb,size,compar); offset = (char *) bsearch(key,base,nmemb,size,compar); if( offset = =NULL){ printf(“%s not found! ”,key); strcpy(data[nmemb++],key); printf(“Add %s to data array ”,key); }else{ printf(“found: %s ”,offset); } } } |
执行 |
>hello /*输入hello字符串*/ hello not found! /*找不到hello 字符串*/ add hello to data array /*将hello字符串加入*/ >.list /*列出所有数据*/ freebsd linux solaris sunos windows hello >hello found: hello |
|
|
|
lfind(线性搜索) |
相关函数 |
lsearch |
表头文件 |
#include<stdlib.h> |
定义函数 |
void *lfind (const void *key,const void *base,size_t *nmemb,size_t size,int(* compar) (const void * ,const void *)); |
函数说明 |
lfind()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关键数 据,参数base指向要被搜索的数组开头地址,参数nmemb代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar为一 函数指针,这个函数用来判断两个元素是否相同,若传给compar 的异地个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0值。Lfind()与lsearch()不同点在 于,当找不到关键数据时lfind()仅会返回NULL,而不会主动把该笔数据加入数组尾端。 |
返回值 |
找到关键数据则返回找到的该笔元素的地址,如果在数组中找不到关键数据则返回空指针(NULL)。 |
范例 |
参考lsearch()。 |
|
|
|
lsearch(线性搜索) |
相关函数 |
lfind |
表头文件 |
#include<stdlib.h> |
定义函数 |
void *lsearch(const void * key ,const void * base ,size_t * nmemb,size_t size, int ( * compar) (const void * ,const void *)); |
函数说明 |
lsearch()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关 键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size 决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素是否相同,若传给compar 的第一个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0 值。如果lsearch()找不到关键数据时会主动把该项数据加入数组里。 |
返回值 |
找到关键数据则返回找到的该笔元素的四肢,如果在数组中找不到关键数据则将此关键数据加入数组,再把加入数组后的地址返回。 |
范例 |
#include<stdio.h> #include<stdlib.h> #define NMEMB 50 #define SIZE 10 int compar (comst void *a,const void *b) { return (strcmp((char *) a, (char *) b)); } main() { char data[NMEMB][SIZE]={“Linux”,”freebsd”,”solzris”,”sunos”,”windows”}; char key[80],*base,*offset; int i, nmemb=NMEMB,size=SIZE; for(i=1;i<5;i++){ fgets(key,sizeof9key),stdin); key[strlen(key)-1]=’’; base = data[0]; offset = (char *)lfind(key,base,&nmemb,size,compar); if(offset ==NULL){ printf(“%s not found! ”,key); offset=(char *) lsearch(key,base,&nmemb,size,compar); printf(“Add %s to data array ”,offset); }else{ printf(“found : %s ”,offset); } } } |
执行 |
linux found:linux os/2 os/2 not found! add os/2 to data array os/2 found:os/2 |
|
|
|
qsort(利用快速排序法排列数组) |
相关函数 |
bsearch |
表头文件 |
#include<stdlib.h> |
定义函数 |
void qsort(void * base,size_t nmemb,size_t size,int ( * compar)(const void *, const void *)); |
函数说明 |
参数base指向欲排序的数组开头地址,参数nmemb代表数组中的元素数量,每一元素的大 小则由参数size决定,最后一项参数compar为一函数指针,这个函数用来判断两个元素间的大小关系,若传给compar的第一个参数所指的元素数据 大于第二个参数所指的元素数据则必须回传大于零的值,两个元素数据相等则回传0。 |
返回值 |
|
附加说明 |
|
范例 |
#define nmemb 7 #include <stdlib.h> int compar (const void *a ,const void *b) { int *aa=(int * ) a,*bb = (int * )b; if( * aa >* bb)return 1; if( * aa == * bb) return 0; if( * aa < *bb) return -1; } main( ) { int base[nmemb]={ 3,102,5,-2,98,52,18}; int i; for ( i=0; i<nmemb;i++) printf(“%d “,base[i]); printf(“ ”); qsort |
相关阅读 更多 +