2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

C++高频常用函数(总结非常详细)

时间:09-15来源:作者:点击数:31
CDSY,CDSY.XYZ

提示:这些函数都是平常经常会用到的,所有这边做个笔记记录、总结整理,可能有些许遗漏可以提醒我补充。后续我也会争取完善。

文章目录

前言

这些函数都非常非常有用


math ( c ) /cmath( c++ )

向上向下取整(ceil/floor):

  • #include<math.h>
  • float t=5.6;
  • int n1=ceil(t);//n1=6 向上取整
  • int n2=floor(t);//n2=5 向下取整

四舍五入(round):

round函数返回按照指定的小数位进行四舍五入运算的结果。

round(number,digits) 参数 number:要四舍五入的数,digits是要小数点后保留的位数,如果digits>0,则四舍五入到指定小数位; 如果digits=0,则四舍五入到最接近的整数; 如果digits<0,则在小数点左侧进行四舍五入; 如果round函数只有参数number,等同于digits等于0。 返回值:四舍五入后的值。

  • int a=round(3.1415926);//3
  • int b=round(3.1415926,1);//3.1
  • int c=round(3.1415926,2);//3.14

取绝对值(abs):

abs()是对整数取绝对值,

函数原型:int abs(int x)

  • //添加cmath.h头文件
  • #include<cmath.h>
  • //abs取绝对值
  • int tmp=-10;
  • tmp=abs(tmp);//tmp=10

fabs()是对浮点数取绝对值,

函数原型:double fabs(double x)

  • double db=-3.14;
  • db=fabs(db);//3.14

求a的b次方(pow):

  • #include <math.h>
  • int a,b,result;
  • result = pow(a,b);//计算a的b次方

算数平方根(sqrt)

函数原型:double sqrt(double x);

  • #include<math.h>
  • double tmp;
  • tmp=sqrt(36);

对数(log)

函数原型:double = log(double x)

以e(2.71828)为底

  • #include <math.h>
  • #include <stdio.h>
  • double result;
  • double x=800.6872;
  • result=log(x);

三角函数(sin/cos/tan…)

函数原型:

  • double __cdecl sin(double _X);
  • double __cdecl cos(double _X);
  • double __cdecl tan(double _X);
  • double __cdecl asin(double _X);
  • double __cdecl acos(double _X);
  • double __cdecl atan(double _X);
  • double __cdecl atan2(double _Y,double _X);

举例实现:

  • #include <stdio.h>
  • #include <math.h>
  • #define PI 3.14159265
  • double x, ret, val;
  • x = 30.0;
  • val = PI / 180;
  • ret = sin(x*val);
  • ret = cos(x*val);
  • ret = tan(x*val);
  • x = 1.0;
  • val = 180.0 / PI;
  • ret = asin(x) * val;
  • ret = acos(x) * val;
  • ret = atan(x) * val;

exp()函数

exp函数用来计算以自然常数e为底的指数。即:exp(n)表示e的n次方。

例如:exp(0)即计算e的0次方,结果为1。

也可以用来进行开方处理

  • //8进行开方
  • double tempb=exp(log(8)/2);

algorithm

取最大最小值(max/min)

  • int a,b,maxnum,minnum;
  • int maxnum = max(a,b);
  • int minnum = min(a,b);

交换(swap)

函数原型:swap(x, y)

  • int a=1, b=2;
  • swap(a, b);

数组/字符串翻转(reverse)

数组或者字符串翻转

  • #include<algorithm.h>
  • //reverse将数组或者字符串翻转
  • string a="agfnbxk";
  • reverse(a.begin(),a.end());
  • int arr[4] = {1,2,3,4};
  • reverse(arr,arr+4);

排序(sort)

排序函数sort()默认升序

  • #include<algorithm>
  • //sort函数可以将字符串和数组排序根据ascill码从小到大
  • int array[10];
  • sort(array.begin(),array.end());

赋值(fill)

fill函数可以为数组或者vector中的每个元素赋以相同的值,通常用于初始化!

使用assign函数只能对vector赋初值,所以当要对数组赋初值时可以使用fill函数。

  • #include<algorithm>
  • int arr[4];
  • fill(arr, arr+4, 0);

排列(next_permutation)

next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。

prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。

next_permutation(数组头地址,数组尾地址);若下一个排列存在,则返回真,如果不存在则返回假

若求上一个排列,则用prev_permutation

  • string str="123";
  • next_permutation(str.begin(),str.end());
  • printf("%s", str.c_str());
  • int a[6]= {1,2,3,4,5};
  • next_permutation(a,a+5)

查找(lower_bound)

在从小到大的排序数组中,

lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

在从大到小的排序数组中,重载lower_bound()和upper_bound()

lower_bound( begin,end,num,greater() ):从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

upper_bound( begin,end,num,greater() ):从数组的begin位置到end-1位置二分查找第一个小于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

  • int cmd(int a,int b)
  • {
  • return a>b;
  • }
  • int num[6]={1,2,4,7,15,34};
  • sort(num,num+6); //按从小到大排序
  • int pos1=lower_bound(num,num+6,7)-num; //返回数组中第一个大于或等于被查数的值
  • int pos2=upper_bound(num,num+6,7)-num; //返回数组中第一个大于被查数的值
  • cout<<pos1<<" "<<num[pos1]<<endl;
  • cout<<pos2<<" "<<num[pos2]<<endl;
  • sort(num,num+6,cmd); //按从大到小排序
  • int pos3=lower_bound(num,num+6,7,greater<int>())-num; //返回数组中第一个小于或等于被查数的值
  • int pos4=upper_bound(num,num+6,7,greater<int>())-num; //返回数组中第一个小于被查数的值
  • cout<<pos3<<" "<<num[pos3]<<endl;
  • cout<<pos4<<" "<<num[pos4]<<endl;

cstring/string

求长度(strlen)

求字符串数组长度:strlen(char chs[])

字符串实际字符数(不包括’\0’)

strlen是不会计算\0之后的长度的

strlen()函数是可以获得数据类型长度 //在c++中 在获取字符串长度时 size()length()函数作用相同

strlen()计算字符串长度是碰到第一个字符串结束符’\0’为止 且不包含’\0’

  • #include<string>
  • char str[30] = "good morning everybody" ; // 22个字符
  • int len=strlen(str);//22

初始化和拷贝(memset/memcpy)

memset

memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。

函数原型:void *memset(void *s, int c, size_t n);

memset函数是按照字节对内存块进行初始化,所以不能用它将int数组出初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。

其实c的实际范围应该在0~255,因为memset函数只能取c的后八位给所输入范围的每个字节。也就是说无论c多大只有后八位二进制是有效的。

  • #include<string>
  • int a[4];
  • memset(a,0,sizeof(a));

s指向要填充的内存块。

c是要被设置的值。

n是要被设置该值的字符数。

返回类型是一个指向存储区s的指针。

memcpy

memcpy函数是C/C++语言中的一个用于内存复制的函数:

函数原型:void *memcpy(void *destin, void *source, size_t n);

作用是:以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。

函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。

  • #include<string>
  • int a[10] = { 0, -1, 2, 3, 4, 5, 6, 7, 8, 9 };
  • int n = 5;
  • memcpy(a+3, a, n);

复制(strcpy)

strcpy()函数:是将一个字符串复制到另一块空间地址中的函数,‘\0’是停止拷贝的终止条件,同时也会将 ‘\0’ 也复制到目标空间。函数原型:char *strcpy(char *dst, const char *src);

  • char a[7]="abcdef";
  • char b[4]="ABC";
  • strcpy(a,b);

比较(strcmp)

strcmp函数语法为int strcmp(char *str1,char *str2);其作用是比较字符串str1和str2是否相同,如果相同则返回0,如果不同,前者大于后者则返回1,否则返回-1。

  • char a[]="abcd";
  • char *b="abcd";
  • char *d="abcde";
  • int d=strcmp(a,b); //那么d的值是0
  • d=strcmp(b,d); //d的值是-1 因为 '\0' 比'e' 小
  • d=strcmp(d,b); //d的值是1,因为 'e' 比'\0'大

追加连接(strcat)

strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容

函数原型:char *strcat(char * destination,const char * source);

  • #include<string>
  • char p1[20] = "hello";
  • const char* p2 = " world";
  • strcat(p1, p2);//p1=p1+p2

转换字符串(sscanf)

sscanf通常被用来解析并转换字符串,其格式定义灵活多变,可以实现很强大的字符串解析功能。

str(待解析的字符串)只能是字符串数组char*,不能是string

  • //整形数转换
  • int year, month, day;
  • int converted = sscanf("20191103", "%04d%02d%02d", &year, &month, &day);//converted=3 3个例子成功转换
  • //浮点数转换
  • double longitude, latitude;
  • int converted = sscanf("113.123456789 31.123456789", "%lf %lf", &longitude, &latitude);

字符串格式化(sprintf)

sprintf指的是字符串格式化命令,函数声明为 int sprintf(char *string, char *format [,argument,…]);主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。

  • sprintf(s, "%d", 123); //产生"123"
技巧记忆
  • scanf("%d", &n); // 键盘输入 ——> n变量
  • sscanf(str, "%d", &n); // str ——> n变量
  • printf("%d", n); // n变量 ——> 屏幕输出
  • sprintf(str, "%d", n); // n变量 ——> str

ctype

这边就没分开,全都写在一起了

  • #include <ctype.h>
  • //判断一个字符是否为字母,是字母则返回非零,否则返回零
  • int a=isalpha('a');
  • isalunm();//判断一个字符是否为数字或字母
  • islower();//判断一个字符是否为小写字母
  • isupper();//判断一个字符是否为大写字母
  • //判断一个字符是否为数字 返回0-不是数字,非0-是数字
  • int a=isdigit('0');
  • isxdigit(c);// 当c是十六进制数字为真
  • iscntrl(c);// 当c是控制字符时为真
  • isgraph(c);// 当c不是空格但可打印为真
  • tolower(c);// 如果c是大写字母 输出对应的小写字母 否则原样输出c
  • toupper(c);// 如果c是小写字母 输出对应的大写字母 否则原样输出c

总结

花了较长时间整理,希望可以帮到你们。

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐