字符处理函数
int tolower(char ch)若 ch 是大写字母 ('A'-'Z') 返回相应的小写字母('a'-'z')
int toupper(char ch)若 ch 是小写字母 ('a'-'z') 返回相应的大写字母('A'-'Z')
int _tolower(char ch)返回 ch 相应的小写字母('a'-'z')
int _toupper(char ch)返回 ch 相应的大写字母('A'-'Z')
int toascii(char c)返回 c 相应的 ASCII
举个栗子:
- #include<stdio.h>
- void main(){
- char ch1='j';
- printf("%c\n",tolower('H'));// 输出: h
- printf("%c\n",_toupper('h'));// 输出: H
- printf("%d\n",toascii('a'));// 输出: 97
- }
字符判断函数
int isalpha(char ch) 若 ch 是字母 ('A'-'Z','a'-'z') 返回非 0 值,(返回 1024)否则返回 0
int isalnum(char ch) 若 ch 是字母 ('A'-'Z','a'-'z') 或数字('0'-'9'), 返回非 0 值, 否则返回 0
int isascii(char ch) 若 ch 是字符 (ASCII 码中的 0-127) 返回非 0 值, 否则返回 0
int iscntrl(char ch) 若 ch 是作废字符 (0x7F) 或普通控制字符(0x00-0x1F), 返回非 0 值, 否则返回 0
int isdigit(char ch) 若 ch 是数字 ('0'-'9') 返回非 0 值, 否则返回 0
int isgraph(char ch) 若 ch 是可打印字符 (不含空格)(0x21-0x7E) 返回非 0 值, 否则返回 0
int islower(char ch) 若 ch 是小写字母 ('a'-'z') 返回非 0 值, 否则返回 0
int isupper(char ch) 若 ch 是大写字母 ('A'-'Z') 返回非 0 值, 否则返回 0
int isprint(char ch) 若 ch 是可打印字符 (含空格)(0x20-0x7E) 返回非 0 值, 否则返回 0
int ispunct(char ch) 若 ch 是标点字符 (0x00-0x1F) 返回非 0 值, 否则返回 0
int isspace(char ch) 若 ch 是空格(''), 水平制表符('\t'), 回车符('\r'), 走纸换行('\f'), 垂直制表符('\v'), 换行符('\n') 返回非 0 值, 否则返回 0
int isxdigit(char ch) 若 ch 是 16 进制数 ('0'-'9','A'-'F','a'-'f') 返回非 0 值, 否则返回 0
举个栗子:
- #include<stdio.h>
- void main(){ char ch1='j';
- printf("%d\n",isalpha(ch1));// 输出: 1024
- printf("%d\n",isalnum(ch1));// 输出: 8
- printf("%d\n",isdigit(ch1));// 输出: 0:
- }
类型转换
Str->double
头文件: stdlib.h
函数原型: double strtod(const char *nptr,char **endptr);
说明: nptr 为原字符串, endptr 原字符串转换后抛弃的后面的内容, 填写 NULL 则不返回, 原字符串数字前面只能是控制或者加减号.
返回值: 正负 double 值
举个栗子:
- #include<stdio.h>
- #include<stdlib.h>
- void main(){
- char *ch1="-100.65987ffjj";
- char *endss;
- printf("%lf\n",strtod(ch1,NULL));// 输出:-100.659870
- printf("%lf\n",strtod(ch1,&endss));// 输出:-100.659870
- printf("%s\n",endss);// 输出: ffjj
- }
- Str->long int
头文件: stdlib.h
函数原型: long int strtol(const char *str, char **endptr, int base)
返回值: 长整型, 以 base 提取, 然后再转换为 long int 类型
参数:
str -- 要转换为长整数的字符串.
endptr -- 对类型为 char* 的对象的引用, 其值由函数设置为 str 中数值后的下一个字符.
base -- 基数, 必须介于 2 和 36(包含)之间, 或者是特殊值 0(如 0x 开头的自动设置为十六进制等).
举个栗子:
- #include<stdio.h>
- #include<stdlib.h>
- void main(){
- char *ch1="0101jjx";
- char *endss;
- printf("%ld\n",strtol(ch1,NULL,2));// 输出: 5
- printf("%ld\n",strtol(ch1,&endss,10));// 输出: 101
- printf("%s\n",endss);// 输出: jjx
- }
- Str->int
头文件: stdlib.h
原型: int atoi(const char *nptr);
注意: 原字符串开头必须是空格或者数字或者加减号
举个栗子:
- #include<stdio.h>
- #include<stdlib.h>
- void main(){
- char *ch1="11.963xxx";
- printf("%d\n",atoi(ch1));// 输出: 11
- }
- str->double
atof() 字符串转换到 double 符点数, 使用方法与 stoi 相似
str->long int
atol() 字符串转换到 long 整型, 使用方法与 stoi 相似
字符串处理函数
长度计算:
strlen()函数:
头文件: string.h
原型: int strlen(const char *str)
返回值: 遇到'\0'或者 0 就返回, 返回此之前的字符串长度
举个栗子:
- #include<stdio.h>
- #include<string.h>
- void main(){
- // char ch[]={'a','b',0,'c'};// 0 或者'\0'
- char ch[]={'a','b','\0','c'};
- printf("strlen 为:%d\n",strlen(ch)); // 输出 2
- }
运算符 sizeof()
C/C++ 中的一个操作符(operator), 返回是一个对象或者类型所占的内存字节数
举个栗子:
- #include<stdio.h>
- void main(){
- char ch[]={'b',0,'c'};
- int inx=10;
- printf("ch===sizeof:%d\n",sizeof(ch));// 输出: 3
- printf("int===sizeof:%d\n",sizeof(inx));// 输出: 4
- }
拷贝 (替换) 函数:
strcpy()函数
头文件: string.h
原型: char *strcpy(char *dest, const char *src);
返回值: 将 str 以'\0'或者 0 为截止前的字符串替换 dest, 返回值为 dest 首地址或者也可以直接访问 dest 获得最终结果
举个栗子:
- #include<string.h>
- void main(){
- char ch1[100]="123456789";
- char *ch2="abc";
- printf("%s\n",strcpy(ch1,ch2));// 输出 abc
- printf("%s\n",ch1);// 输出: abc
- printf("%s\n",ch2);// 输出: abc
- }
strncpy()函数
头文件: string.h
原型: char *strncpy(char *dest, const char *src, int n)
返回值: 将 src 以'\0'或 0 或者 n 长度为截止前的字符串替换 dest, 返回值为 dest 首地址或者也可以直接访问 dest 获得最终结果
注意: 这个 n 值很重要, 如果拷贝到了 src 最后的'\0'则如同替换效果了, 如果拷贝是 n 的值小于或者等于 strlen(), 则会保留 dest 未使用的内容.
举个栗子:
- #include<stdio.h>
- #include<string.h>
- void main(){
- char ch1[100]="123456789";
- char *ch2="abc";
- printf("%s\n",strncpy(ch1,ch2,strlen(ch2)));// 输出: abc456789
- printf("%s\n",ch1);// 输出: abc456789
- printf("%s\n",ch2);// 输出: abc
- }
比较函数
strcmp()与 strncmp()函数
头文件: string.h
原型:
- int strcmp(const char *s1, const char *s2);
- int strncmp(const char *s1, const char *s2,int n);
返回值: 若参数 s1 和 s2 字符串相同则返回 0,s1 若大于 s2 则返回大于 0 的值, s1 若小于 s2 则返回小于 0 的值.
举个栗子:
- #include<stdio.h>
- #include<string.h>
- void main(){
- char *ch1="BCD";
- char *ch2="BCd";
- printf("%d\n",strcmp(ch1,ch2)); // 输出:-32
- printf("%d\n",strncmp(ch1,ch2,2));// 输出: 0
- }
strcasecm()与 strncasecm()
忽略字母大小写进行比较, 其他类似 strcmp()函数
举个栗子
- #include<stdio.h>
- #include<string.h>
- void main(){
- char *ch1="abdc";
- printf("%d\n",strncasecmp(ch1,"ABC",2));// 输出: 0
- }
追加函数
strcat()与 strncat()函数
头文件: string.h
原型:
- char *strcat(char *dest, const char *src)
- char *strcat(char *dest, const char *src,int n)
返回值: 将 src 以追加的方式添加到 dest 中, 返回值为 dest 首地址或者也可以直接访问 dest 获得最终结果
举个栗子:
- #include<stdio.h>
- #include<string.h>
- void main(){
- char ch1[100]="BCD";
- char *ch2="123456";
- printf("%s\n",strcat(ch1,ch2));// 输出: BCD123456
- printf("%s\n",strncat(ch1,ch2,2));// 输出: BCD12345612
- }
查找字符
strchr()与 strrchr()函数
头文件: string.h
原型:
- char *strchr(const char *s,char c) // 从左向右
- char *strrchr(const char *s,char c) // 从右向左
返回值: 返回查找到的本身位置, 如果查找失败则发货 NULL
举个栗子:
- #include<stdio.h>
- #include<string.h>
- void main(){
- char *ch1="1234563221";
- printf("%s\n",strchr(ch1,'3'));// 输出: 34563221
- printf("%s\n",strrchr(ch1,'3'));// 输出: 3221
- if(!strchr(ch1,'R')){
- printf("-------------\n");// 成功输出此处
- }
- }
查找字符串
strstr()函数
头文件: string.h
原型
char *strstr(char *str1, const char *str2);// 从左向右
返回值: 返回查找到的字符串中的首地址
注意: strrstr()函数是不自带的, 可以通过 strstr()进行模拟
举个栗子:
- #include<stdio.h>
- #include<string.h>
- void main(){
- char *ch1="1234562321";
- printf("%s\n",strstr(ch1,"23"));//234562321
- if(!strstr(ch1,"5566")){
- printf("-------------\n");// 成功输出此处
- }
- }
参考:
来源: https://www.cnblogs.com/dongxiaodong/p/10693659.html