分享
 
 
 

Linux C 函数参考(数据结构及算法)

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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\n”,passwd);

printf(“After crypt(),2nd passwd:%s \n”,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]=’\0’;

if(!strcmp(key,”exit”))break;

if(!strcmp(key,”list”)){

for(i=0;i<nmemb;i++)

printf(“%s\n”,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!\n”,key);

strcpy(data[nmemb++],key);

printf(“Add %s to data array\n”,key);

}else{

printf(“found: %s \n”,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]=’\0’;

base = data[0];

offset = (char *)lfind(key,base,&nmemb,size,compar);

if(offset ==NULL){

printf(“%s not found!\n”,key);

offset=(char *) lsearch(key,base,&nmemb,size,compar);

printf(“Add %s to data array\n”,offset);

}else{

printf(“found : %s \n”,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(“\n”);

qsort(base,nmemb,sizeof(int),compar);

for(i=0;i<nmemb;i++)

printf(“%d”base[i]);

printf(“\n”);

}

执行

3 102 5 -2 98 52 18

-2 3 5 18 52 98 102

rand(产生随机数)

相关函数

srand,random,srandom

表头文件

#include<stdlib.h>

定义函数

int rand(void)

函数说明

rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。

返回值

返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。

范例

/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考

srand()*/

#include<stdlib.h>

main()

{

int i,j;

for(i=0;i<10;i++)

{

j=1+(int)(10.0*rand()/(RAND_MAX+1.0));

printf(“%d “,j);

}

}

执行

9 4 8 8 10 2 4 8 3 6

9 4 8 8 10 2 4 8 3 6

srand(设置随机数种子)

相关函数

rand,random srandom

表头文件

#include<stdlib.h>

定义函数

void srand (unsigned int seed);

函数说明

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

返回值

范例

/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/

#include<time.h>

#include<stdlib.h>

main()

{

int i,j;

srand((int)time(0));

for(i=0;i<10;i++)

{

j=1+(int)(10.0*rand()/(RAND_MAX+1.0));

printf(“ %d “,j);

}

}

执行

5 8 8 8 10 2 10 8 9 9

2 9 7 4 10 3 2 10 8 7

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有