您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

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

时间:09-15来源:作者:点击数:
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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐