1 C语言常用计算的库函数
下面的所有用例的参数赋值:
int a = 2;
int b = 4;
int val = 0;
计算类函数声明在头文件#include<math.h>中;
1.1 pow() x的y次幂
函数原型:double pow(double _X,double _Y);
val = pow(a, b); // a的b次幂
printf("pow val = %d\n", val); // 16
1.2 sqrt() 计算平方根
函数原型:double sqrt(double _X);
val = sqrt(b); // 计算平方根
printf("sqrt val = %d\n", val); // 2
1.3 abs() 计算绝对值
函数原型:int abs(int _X);
val = abs(a - b); // 计算绝对值
printf("abs val = %d\n", val); // 2
1.4 fmax() 计算最大值
函数原型:double fmax(double, double);
val = fmax(a, b); // 计算最大值
printf("max val = %d\n", val); // 4
1.5 fmin () 计算最小值
函数原型:double fmin (double, double);
val = fmin(a, b); // 计算最小值
printf("min val = %d\n", val); // 2
1.6 isdigit() 判断是否为数字(char型)
该函数声明在头文件#include <ctype.h>中
函数原型:int isdigit(int _C);
val = isdigit(a); // 判断是否为数字(char型)(参数为0~9,则返回非0值,否则返回0) //判断一串字符中的阿拉伯数字
printf("isdigit1 val = %d\n", val); // 0
val = isdigit('3');
printf("isdigit2 val = %d\n", val); // 1
val = isdigit('s');
printf("isdigit3 val = %d\n", val); // 0
1.7 isalpha() 判断是否为字母(char型)
该函数声明在头文件#include <ctype.h>中
函数原型:int isalpha(int _C);
val = isalpha(a); // 判断是否为字母(char型)(若为英文字母,则返回非0值(大写为1,小写为2),否则返回0) //判断一串字符中的阿拉伯数字
printf("isalpha1 val = %d\n", val); // 0
val = isalpha('A');
printf("isalpha2 val = %d\n", val); // 1
val = isalpha('a');
printf("isalpha3 val = %d\n", val); // 2
2 C语言常用内存操作的库函数
2.1 memset() 内存赋值函数
该函数声明在头文件#include <string.h>中
函数原型:void *memset(void *_Dst,int _Val,size_t _Size);
该函数作用是对于某一段内存空间全部设置称为某个字符,一般在对定义的字符串中进行初始化为’ ’或’\0’,也可以方便的清空一个结构类型的变量或数组。
int arr1[3] = {1, 2, 3};
memset(arr1, 0, sizeof(int) * 3); // arr1: 0 0 0 //给数组arr1的每个元素赋值为0
2.1 memcpy() 复制内存块
该函数声明在头文件#include <string.h>中
函数原型:void * memcpy(void * restrict _Dst,const void * restrict _Src,size_t _Size);
char arr2[10] = "shn123";
char str2[10] = {0};
memcpy(str2, arr2, sizeof(char) * 10);
printf("str2 = %s\n", str2); //str2 = shn123
int arr3[10] = {1, 2, 3, 4, 5, 6, 7};
int arr4[10] ={0};
memcpy(arr4, arr3, sizeof(int) * 10);
for (i = 0; i < 10; i++) {
printf("%d ", arr4[i]);// arr4: 1 2 3 4 5 6 7 0 0 0
}
3 C语言常用字符串的库函数
字符串操作类标准函数声明在头文件#include<string.h>中;
3.1 strlen()函数
函数原型:size_t strlen(const char *s)
用于统计字符串的长度,返回s字符串中的字符数,但不包括末尾的空字符‘\0’。
3.2 拼接字符串:strcat()
函数原型:char *strcat(char *s1, const char *s2)
这个函数接收两个字符串指针做为参数,然后把两者拼接起来并返回拼接结果的指针。把第二个字符串拼接到第一个的结尾,第二个字符串是以常量char指针的形式传递,函数不会 分配内存,因此第一个字符串必须足够长,能够容纳拼接后的结果。函数的返回值地址和第一个参数的地址一样。
注意:第一个字符串s1不能为空,s2的第一个字符会会覆盖s1中结束符‘\0’。
不合法使用用例:
char error[] = “505”;
char errorMassage[] = “shi hao nan”;
error = strcat(error, errorMassage);//操作错误,把函数返回的指针赋值给数组的名字,这类操作不合法
3.3 拼接字符串:strncat()
函数原型:char *strncat(char *s1, const char *s2, size_n)
例如:strncat(str1,str2,10);
//拷贝arr2中的10个字符在arr1中,并在拷贝字符的末尾加一个结束符‘\0’。
注意:size_n为最大添加字符数(不管空字符),加到第10个字符或者遇到空字符‘\0’时停止。
3.4 比较字符串:strcmp()
函数原型:int strcmp(const char *s1, const char *s2)
用于比较两个字符串的内容,会依次进行比较每个字符,直到发现第一个不同为止,注意比较所有的字符(ASCII值进行比较),不只是字母。要比较的两个字符串都以指向char常量的指针的形式传递,不用担心传入的字符串被修改。
函数返回值:负数:按照字母序,s1比s2小就返回负数;0:两个字符串相等就返回0;整数:按照字母序,s1比s2大就返回正数;
strcmp(“A”, “B”);//返回-1
使用错误实例:
scanf(“%S”,command);
if(command = “quit”) //导致错误,不能把字符串的字面量地址赋值给数组的名字
if(command == “quit”) //导致错误,因为比较的是command的地址(200)和字符串字面量的地址(600),相等操作符比较的是地址,而不是地址中的内容,用数组名字或者字符串的字面量就会返回地址。
3.5 比较字符串:strncmp()
函数原型:int strncmp(const char *s1, const char *s2, size_n)
用于比较前参数指定的字符。
例如:
strncmp(name, arr, 5);
//在比较5个字符或者遇到第一个空字符‘\0’时停止比较。
3.6 复制字符串:strcpy()
函数原型:char *strcpy(char *s1, const char *s2)
用于拷贝字符串,例如:strcpy(str1, str2);//第二个参数拷贝到第一个参数
注意:从首地址开始,第一个参数原数据会被全覆盖,并且把第二个参数中的空字符也拷贝在内。(会先把第一个字符串清零,然后复制第二个字符串);
内部实现方法:
1)用一个很长的char数组读入字符串;
2)用malloc分配刚好可以容纳字符串的适量内存;
3)用strcpy把字符串复制到动态分配的内存中。
注意:两个指针可以引用同一个字符串,两个指针引用同一个地址称之为别名。把一个指针赋值给另一个指针不会复制字符串,只是复制了字符串的地址。
例如:
char *pArr[100];//指针数组
pArr[12] = “this is book”;
pArr[13] = pArr[12];
3.7 复制字符串:strncpy()
函数原型:char *strncpy(char *s1, const char *s2, size_n)
第3个参数可指明拷贝的最大字符数,注意不会覆盖原来的数据。直接从首地址开始覆盖。
例如1:
strncpy(str1, str2, 10);//返回值为第一个参数
//注意:str1要记得加结束符‘\0’!!!!!!重!
例如2:
char str1[20] = "123456";
char str2[10] = "shn";
strncpy(str1+strlen(str1), str2, strlen(str2)); //返回值为第一个参数
str1[9]= '\0';
printf("%s \n",str1);//123456shn
strcpy(str1, str2);
printf("%s \n",str1);//shn
3.8 sprintf()函数
函数原型:sprintf (char*, const char*, …);
把数据写入字符串,该函数声明在stdio.h中。
例如:
char shn_info[50] = {0};
char name[] = "shn";
int id = 456;
int age = 26;
sprintf(shn_info,"name = %s, id = %d, age = %d", name, id, age);
printf("shn_info: %s\n",shn_info);// shn_info:name = shn, id = 456, age = 26
//注意:shn_info为目标字符串地址,会先把shn_info字符串中的数据清空,然后把结合后的字符串存储在字符串shn_info中。
3.9 查找字符串中的字符:strchr()
函数原型:char *strchr(const char *s1, int c)
如果s1字符串包含c字符,该函数就会返回s1字符串中首次出现c字符的指针,如果在s1字符串中没有找到c字符,该函数就会返回空指针。
例如:
char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strchr(shn_info,'e');
printf("ch = %c\n",*p);//ch = e
3.10 strpbrk()函数
函数原型:char *strpbrk(const char *s1, const char *s2)
该函数作用:s1字符包含s2字符串中的任意字符,该函数返回指向s1字符串中首位置的指针,如果s1中没有找到s2的字符串中的字符,则返回空字符。
例如:
char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strpbrk (shn_info,”jzde”);
printf("ch = %c\n",*p);//ch = e
3.11 strrchr()函数
函数原型:char *strrchr(const char *s1, int c)
该函数返回s字符串中c字符最后一次出现的位置指针,末尾的空字符也是字符串的一部分,也在查找范围内。若未找到c字符,则返回空指针。
例如:
char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strrchr(shn_info,'a');
printf(" %c%c \n",*p, *(p+1));//ag
3.12 strstr ()函数
函数原型:char *strstr(const char *s1, const char *s2)
该函数返回指向s1字符串中s2字符串出现的首位置指针。若未找到s2字符串,则返回空指针。
例如:
char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strstr (shn_info, "id");
printf(" %c%c \n",*p, *(p+1));//id
3.13 strtok_s()函数
strtok_s是windows下的一个分割字符串安全函数,其函数原型如下:
char *strtok_s( char *strToken, const char *strDelimit, char **buf);
这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。
例如:
int Pro(char *s)
{
char *p = NULL;
char *pTmp = NULL;
char *buf[20];
int k = 0;
pTmp = strtok_s(s, ",", &p);
while (pTmp != NULL) {
buf[k++] = pTmp;
pTmp = strtok_s(NULL, ",", &p); // 注意使用
}
int i = 0;
for (i = 0; i < k; i++) {
printf("%s\n", buf[i]);
}
return 0;
}
int main(void)
{
int n;
char str[30] = "12,34,56,78,9";
Pro(str);
printf("str = %s", str);
system("pause");
return 0;
}
运行结果如下:
12
34
56
78
9
str = 12请按任意键继续. . .
【总结分享和大家共同进步】
若存在错误之处,欢迎批评指正,若有收获,欢迎关注点赞~
文章出处登录后可见!