提示:这些函数都是平常经常会用到的,所有这边做个笔记记录、总结整理,可能有些许遗漏可以提醒我补充。后续我也会争取完善。
这些函数都非常非常有用
#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
花了较长时间整理,希望可以帮到你们。