c语言刷题常用库函数

字符串相关函数:

size_t strlen(cs) //求出cs的长度

char *strcpy(s,ct) //把c复制到s.要求s指定足够大的字符数组

char *strncpy(s,ct,n)//把c埋里的至多n个字符复制到s.要求s指定一个足够大的字符数组.如果c里的字符不够n个,就在s里填充空字符.

char *strcat(s,ct) //把c里的字符复制到s里已有的字符串之后.s应指定一个保存着字符串,而且足够大的字符数组.

char *strncat(s,ct,n)//把ct里的至多n个字符复制到s里已有的字符串之后.s应指定一个保存着字符串,而且足够大的字符数组.

int strcmp(cs,ct)  //比较字符串cs和ct的大小,在cs大于、等于、小于ct时分别返回正值、0、负值.

int strncmp(cs,ct,n)  //比较字符串cs和c的大小,至多比较n个字符.在cs大于、等于、小于ct时分别返回正值、0、负值.

char *strstr(cs,ct)	//在cs中查寻串ct(查询子串),返回ct作为cs的子串的第一个出现的位置,ct未出现在cs里时返回NULL

char *strchr(cs,c)	//在cs中查寻c并返回c第一个出现的位置,用指向这个位置的指针表示.当cs里没有c时返回值NULL

char *strchr(cs,c)	//在cs中查寻c并返回c第一个出现的位置,

strcpy和memcpy的区别:  

       1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类

       2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

       3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

其他:
  • int atoi(const char *nptr);//字符串转整数函数,nptr: 要转换的字符串
  • char* itoa(int value,char*string,int radix);//value: 要转换的整数,string: 转换后的字符串,radix: 转换进制数,如2,8,10,16 进制等。

( 这俩函数不建议使用!! itoa是广泛使用的非标准C语言和C++语言扩展功能。但因为它是一个非标准的C / C++语言功能,因此不能好好的被所有编译器使用。在大多数Windows下的编译器通常在<cstdlib>头文件包含非标准函数。)

除了二进制,上面两函数的相应功能由下面两函数代替:

sprintf函数:将整形变量以某种进制格式存储成为字符串

  • sprintf(str, "%d", 100); //把十进制数100转为字符串100

  • char str[25];

    len1 = sprintf(str, "%x", 100); //把十进制数100转为十六进制表示的字符串,存放到str里, 返回转换后的字符个数,不包含结尾的空字符

sscanf函数:

  • sscanf(str,"%d",&整型变量的名字); //把字符串100转为十进制数100
  • sscanf(字符串的名字,"%x",&整型变量的名字); //以十六进制的方式读取数据,并以二进制方式存进整形变量

内存操作函数:

void *calloc(size_tn, size_t size) //分配一块存储,其中足以存放n个大小为size的对象,并将所有字节用0字符填充.返回该存储块的地址.不能满足时返回NULL
void *malloc(size_t size)//分配一块足以存放大小为size的存储,返回该存储块的地址,不能满足时返回NULL
void *realloc(void *p, size_t size)//将p所指存储块调整为大小size,返回新块的地址.如能满足要求,新块的内容与原块一致;不能满足要求时返回NULL,此时原块不变
void free(void *p)//释放以前分配的动态存储块
void *memcpy(s, ct , size_t n)	//内存拷贝函数,memcpy函数的功能是从源ct所指的内存地址的起始位置开始拷贝n个字节到目标s所指的内存地址的起始位置中。

/* 所属头文件:<memory.h>或<string.h>
函数的功能是:将指针变量 s 所指向的前 n 个字节(这个一定要注意!!!)的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。(也可以将字节初始化为字符)*/
void *memset(void *s, int c, unsigned long n) 

// memmove用于从ct拷贝n个字节到s,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。 所以很适合需要把数组整体移动的情况(这种情况将数组转换为链表可能会更高效)
void *memmove(s, ct , size_t n)

字符相关函数:<ctype.h>)

int tolower(int c) //当c是大写字母时返回对应小写字母,否则返回c本身
int toupper(int c) //当c是小写字母时返回对应大写字母,否则返回c本身

//注:下面条件成立时这些函数返回非0真值。
int isalpha(c)//c是字母字符
int isdigit(c)//c是数字字符
int isalnum(c)//c是字母或数字字符
int isspace(c)//c是空格、制表符、换行符
int isupper(c)//c是大写字母
int islower(c)//c是小写字母

排序函数:qsort

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

参数:

  • base -- 指向要排序的数组的第一个元素的指针。
  • nitems -- 由 base 指向的数组中元素的个数。
  • size -- 数组中每个元素的字节大小
  • compar -- 用来比较两个元素的函数。

 举例:

#include <stdio.h>
#include <stdlib.h>

int values[] = { 88, 56, 100, 2, 25 };

int cmpfunc (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

int main()
{
   int n;

   printf("排序之前的列表:\n");
   for( n = 0 ; n < 5; n++ ) {
      printf("%d ", values[n]);
   }

   qsort(values, 5, sizeof(int), cmpfunc);

   printf("\n排序之后的列表:\n");
   for( n = 0 ; n < 5; n++ ) {
      printf("%d ", values[n]);
   }
  
  return(0);
}

更详细可参考:CSDN

数学函数:<math.h>

fmax(x,y) //x、y之间的最大的那个
double pow(double x, double y) //x的y次方
int abs(int n)	//求整数的绝对值
double sqrt(double x)  //开平方根

ceil(x) //求出不小于x的最小整数(返回与这个整数对应的double值)
floor(x)//求出不大于x的最大整数(返回与这个整数对应的double值)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值