2021寒假专题6
C语言库函数的终章
C语言库函数粗略地学习了一部分,以后使用这些现成的函数再进一步学习,修正
字符串转数字、伪随机数、字符串、时间和日期
include <stdlib.h>
#include <stdio.h>
//字符串转数字
int main()
{
//atof函数,将字符串转换为浮点数
//碰到一个非字母型的字符就会停止,所以最好输入数字字符串,否则会出现难以预料的结果
//double x=atof("df12.3");//x=0.0
double x=atof("12.3df3h"); //x=12.3
//printf("%lf",x);
//atoi函数,将字符串转换为整数
int y=atoi("123.9");//y=123
//printf("%d",y);
//strtol函数 long strtod(char*,char**,base)前一个参数是字符串的起始点,后一个参数是结束地址的地址,base是转换的进制
//strtol函数可舍弃空白字符直到第一个非空白字符
//char str[8]="ab123";
//char *start=str+2;
//char *end;
//long num=strtol(start,&end,10);
//printf("%ld",num);
//strtod函数用法类似,只是内部只有两个参数 double strtod(char*,char**)
char *start="123.45";
char *end;
printf("%.2lf",strtod(start,&end));
include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
//rand() 产生一个伪随机数
//srand() 播种伪随机数生成器
//printf("%d",RAND_MAX); //表示能产生的最大随机数
for(int i=0;i<5;i++)
printf("%d\n",rand());
//rand()函数调用一次,当程序下一次再次使用仍产生相同的随机数
srand(10);
for(int i=0;i<5;i++)
printf("%d\n",rand());
//用时间播种比较常见
srand(time(NULL));
for(int i=0;i<5;i++)
printf("%d\n",rand());
//产生100-1000范围内的随机数,rand%901+100
}
include <string.h>
#include <stdio.h>
//之前已有介绍,部分略过
int main()
{
//char* strcpy(char*,const char*) 后者复制给前者,前者的空间必须大于后者,返回前者的指针
//char* strncpy(char*,const char*,t) t表示最多所复制的字符数(不包括空字符)
//char str1[]="Apple";
//char str2[]="Banana";
//strncpy(str2,str1,sizeof(str2)-1); str2[sizeof(str2)-1]='\0';//strlen(str2)=sizeof(str2)-1
//printf(str2);
//char* strcat(char*,const char*) 后者的内容追加到前者的末尾,剩余空间必须容纳后者(包括空字符),并返回前者的指针
//char* strncat(char*,const char*,t)
char str1[]="def";
char str2[6]="abc";
strncat(str2,str1,sizeof(str2)-strlen(str2)-1);
//printf(str2);
//int strlen(char*)不包括空字符
//int strcmp(*char,*char)前者比后者大,返回大于0
//比较方式:从前往后比较ASCII值,只要比出结果就返回,不再考虑后面的情况
//空格符<0-9<A-Z<a-z
//char* strchr(*char,char)查找第一个出现在字符串的指定字符,返回指针
//char* strrchr(*char,char) 查找最后一个出现在字符串的指定字符,返回指针
//printf("%p\n%p",str2,strrchr(str2,'c'));
//strpbrk
//char* strstr(char*,char*) 子字符串查找,不仅仅是单个字符,功能比较强大
char str[]="weerhvbwerjk";
//printf("%p %p",str,strstr(str,"wer"));
int a[5]={12,46,23,9,6};
//void* memchr(void *,int c,size_t) 在内存中搜索中首次出现的位置,t表示搜索多少内存结束
//printf("%p\n%p",a,memchr(a,9,sizeof(int)*5));
int b[6]={12,46,23,9,5,6};
//int memcmp(void*,void*,size_t) 比较两个内存块,方式与strcmp相同
//printf("%d",memcmp(a,b,sizeof(int)*5));
//void* memset(void*,n,size_t)
//memset的复制一般赋0或者空字符,切不可想赋初值20,n就为20,memset是按字节赋值
memset(a,0,sizeof(a));//重置数组
struct sample{int q};struct sample sa;
//memset(&sa,0,sizeof(struct sample));//重置结构
struct sample sam[10];
memset(sam,0,sizeof(struct sample)*10);//重置结构数组
printf("%d",a[0]);
//void* memcpy(void* s1,void* s2,t)
//memcpy(a,b,sizeof(b)) a要分配足够大的内存空间,且copy的长度与后面的参数有关,类型不限
//memmove 重叠内存copy void* memcpy(void* s1,void* s2,t)
//memmove(a+1,a,3*sizeof(int));
//strerror()打印各种错误信息
}
include <time.h>
#include <stdio.h>
#include <locale.h>
int main()
{
/*long a;
scanf("%ld",&a);
clock_t start=clock();//在输入后开始计时,否则人为的输入会浪费时间
for(int i=0;i<10000;i++)
for(int j=0;j<10000;j++)
a++;
printf("%ld\n",a);
clock_t end=clock();
printf("Time used:%.2f\n",(double)(end-start)/CLOCKS_PER_SEC);//clocks per sec
//该程序可以检查算法的快慢
*/
time_t now=time(NULL);
//char* ctime(*time_t)
//printf(ctime(&now));//打印当前时间
//格式化与本地化
struct tm *lt=localtime(&now);
//struct tm *lt=gmtime(&now);//世界协调时间
setlocale(LC_ALL,"chs");
char ch[100];
strftime(ch,100,"%A %c",lt); //第三个参数决定打印的格式,种类很多,%A表示全工作日名称,%c标准日期时间
printf(ch);
}

浙公网安备 33010602011771号