提示:这些函数都是平常经常会用到的,所有这边做个笔记记录、总结整理,可能有些许遗漏可以提醒我补充。后续我也会争取完善。
这些函数都非常非常有用
- #include<math.h>
- float t=5.6;
- int n1=ceil(t);//n1=6 向上取整
- int n2=floor(t);//n2=5 向下取整
-
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()是对整数取绝对值,
函数原型: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
-
- #include <math.h>
- int a,b,result;
- result = pow(a,b);//计算a的b次方
-
函数原型:double sqrt(double x);
- #include<math.h>
- double tmp;
- tmp=sqrt(36);
-
函数原型:double = log(double x)
以e(2.71828)为底
- #include <math.h>
- #include <stdio.h>
- double result;
- double x=800.6872;
- result=log(x);
-
函数原型:
- 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函数用来计算以自然常数e为底的指数。即:exp(n)表示e的n次方。
例如:exp(0)即计算e的0次方,结果为1。
也可以用来进行开方处理
- //对8进行开方
- double tempb=exp(log(8)/2);
-
- int a,b,maxnum,minnum;
- int maxnum = max(a,b);
- int minnum = min(a,b);
-
函数原型:swap(x, y)
- int a=1, b=2;
- swap(a, b);
-
数组或者字符串翻转
- #include<algorithm.h>
- //reverse将数组或者字符串翻转
- string a="agfnbxk";
- reverse(a.begin(),a.end());
- int arr[4] = {1,2,3,4};
- reverse(arr,arr+4);
-
排序函数sort()默认升序
- #include<algorithm>
- //sort函数可以将字符串和数组排序根据ascill码从小到大
- int array[10];
- sort(array.begin(),array.end());
-
fill函数可以为数组或者vector中的每个元素赋以相同的值,通常用于初始化!
使用assign函数只能对vector赋初值,所以当要对数组赋初值时可以使用fill函数。
- #include<algorithm>
- int arr[4];
- fill(arr, arr+4, 0);
-
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( 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;
-
-
求字符串数组长度: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是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。
函数原型: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函数是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()函数:是将一个字符串复制到另一块空间地址中的函数,‘\0’是停止拷贝的终止条件,同时也会将 ‘\0’ 也复制到目标空间。函数原型:char *strcpy(char *dst, const char *src);
- char a[7]="abcdef";
- char b[4]="ABC";
- strcpy(a,b);
-
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追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容
函数原型:char *strcat(char * destination,const char * source);
- #include<string>
- char p1[20] = "hello";
- const char* p2 = " world";
- strcat(p1, p2);//p1=p1+p2
-
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指的是字符串格式化命令,函数声明为 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
-
这边就没分开,全都写在一起了
- #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
-
花了较长时间整理,希望可以帮到你们。