✒️ 前言
本小节我们将学习字符分类函数,字符串转换函数,使用库函数实现函数(tolower,toupper) 的大小写转换,当然还有字符串转换成整数(isdigit和atoi),使用(snprintf)将整数怎么转换回字符串。最后还有strlen函数的三种模拟实现。文章干货满满,让我们学习起来!
💯字符分类函数 这些函数的使⽤⽅法⾮常类似,如 islower
:
int islower ( int c );
islower
是能够判断参数部分的 c
是否是⼩写字⺟的。
通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回0。
#include <ctype.h> int main() { char arr[] = "A SeN yaO Zi XIn"; int i = 0; while (arr[i]) { if (islower(arr[i])) { arr[i] = arr[i] - 32; } putchar(arr[i]); i++; } return 0; }
例如isalpha
:
#include <ctype.h> int main() { char c = 'a'; if (isalpha(c))//检查是否为==字母==字符( 'a '~'z' 或'A' ~ 'Z') { printf("%c is an alphabetic character.\n", c); } return 0; }
💯 💯字符串转换函数
int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写 int toupper ( int c ); //将参数传进去的⼩写字⺟转⼤写
这两个函数用于转换字母字符的大小写。
例如:
#include <ctype.h> #include <stdio.h> int main() { char arr[] = "I Am A Student"; int i = 0; while (arr[i]) { if (isupper(arr[i])) { //arr[i] = arr[i] + 32; arr[i] = tolower(arr[i]); } putchar(arr[i]); i++; } return 0; }
既然可以字符大小写换,那有没有字符串和数字转换的函数呢?答案是有的。
isdigit
检查单个字符是否是数字atoi
将整个字符串转换为整数
isdigit
函数:
int isdigit(int c);
isdigit
函数用于检查给定字符是否是一个ASCII数字字符。它返回一个非零值或0来指示字符是否是数字(在ctype.h头文件中)。
atoi
函数:
int atoi(const char *str);
atoi函数用于将字符串转换为相应的整数值。它会跳过字符串前面的空格,然后将字符串中连续的数字字符转换为整数返回。(使用atoi函数需要包含stdlib.h头文件)
它们都是标准C库中常用的字符串和数字转换函数。
isdigit:用于检查单个字符c是否是一个数字字符。如果是数字字符,它会返回c对应的ASCII数字值,否则返回0。
atoi(str):用于将字符串str转换为整数。它会跳过字符串前面的空白字符,然后将字符串中的数字字符转换为相应的整数值返回。
这两个函数经常一起使用,来实现字符串到整数的转换:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { char str[] = "123"; int i = 0; int sum = 0; for (i = 0; str[i] != '\0'; i++) { if (isdigit(str[i])) //使用isdigit检查每个字符是否是数字 { sum = sum * 10 + (str[i] - '0'); }//如果是数字,则取它的ASCII值减去'0'得到实际值,累加计算字符串整数值 } printf("isdigit 逐个转换: %d\n", sum); int num = atoi(str);//或者直接使用atoi直接转换整个字符串 printf("atoi 直接转换: %d\n", num); return 0; }
既然有实现字符串到整数的转换,那也可以将整数转换为字符串吧!没错!老铁,杠杠的!
snprintf
函数可以将整数转换为字符串
snprintf
函数原型:
int snprintf ( char * str, size_t n, const char * format, ... ); • 1
其中:
char *str 是目标字符串缓冲区指针
size_t size 是缓冲区大小缓冲区中要使用的最大字节数。生成的字符串的长度最多为 n-1,为额外的终止 null 字符留出空间。(size_t 是无符号整数类型。)
const char *format 是格式字符串
... 表示可变参数列表,根据格式字符串,该函数可能需要一系列附加参数,每个参数都包含一个值,用于替换格式字符串中的格式说明符(或指向存储位置的指针,对于 n)。这些参数的数量应至少与格式说明符中指定的值数一样多。该函数将忽略其他参数。
注意:snprintf函数的返回类型是一个int值,表示实际写入目标字符串(不包括终止null字符’\0’)的字符数。
如果返回值等于或大于指定的size,就表示格式化字符串写入目标缓冲区时会发生截断。
如果足够大,则将写入的字符数,不包括终止 null 字符。
如果发生编码错误,则返回负数。
请注意,只有当此返回值为非负且小于 时,字符串才被完全写入。
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现2:https://developer.aliyun.com/article/1474748