0x01 操作与库函数
对于字符串的操作函数按字符串类型可以分为两类:多字节字符串、宽字节字符串。
多字节字符串:在原本的 ASCLL 字符集上发展而来,英文字符一个字节,中文两个字节
宽字节字符串:Unicode 字符集,所有字符均为宽字节,如:UTF-16、
程序为这两种字符串提供三套 API ,对于多字节类型字符串,可以使用 strxxx
的函数;对于宽字节类型字符串,可以使用 wcsxxx
的函数。
还有一种 API 根据项目预先设定的字符串类型,自动转换为相对应的函数,函数一般名为_tcsxxx
,该类型需要我们导入头文件 #include <tchar.h>
,且推荐使用这种函数。
项目预先设置的字符集类型可以影响使用
TCHAR
定义的字符串类型,不影响使用char
、wchar_t
定义的字符串。
操作函数:
//输出
//char 类型
printf("%s",a);
//wchar_t 类型
printf("%ws",a);
//TCHAR 类型
_tprintf(_T"%s",a);
//以下类型都有三种 strxxx、wcsxxx、_tcsxxx,所以只以 strxxx 为代表
//长度
strlen(a);
//复制
strcpy(destin,text); //不安全的函数,有溢出风险
strcpy_s(destin,sizeof(destin),text); //安全的复制函数,检测字符串长度
strncpy(destin,text,size) //复制指定个数字符(size 个)
//比较
strcmp(str1,str2); //比较两字符串,相等为0,str1大于str2为正数,反之为负数
strncmp(str1,str2,size); //比较前 size 个字符,返回值如上
stricmp(str1,str2); //比较两个字符串,忽略大小写,返回值如上
strnicmp(str1,str2,size); //比较前 size 个字符,忽略大小写,返回值如上
//字符串拼接
strcat(str1,str2); //不安全的拼接函数
strcat_s(str1,sizeof(str1),str2);//安全的拼接函数
//查找字符位置
char *p = strchr(str1,char1); //从左开始查询,返回从找到位置到结尾的字符串,未找到返回 NULL
char *p = strrchr(str1,char1); //从右开始查询,返回规则同上
//查找字符串位置
char *p = strstr(str1,str2); //从左开始查询字符串,返回规则同上
//拆分字符串
const char *tip = "sign" //此处为分隔符,可以为多种如:"_.!"
char *p = strtok(str1,tip); //非安全函数,此处返回被分解的第一个的字符串,若无可分解,返回NULL
/*
*函数内会自动存储分割后剩余的,可以使用循环继续分割,且字符为 NULL 即可
*while(p!=NULL){
* p=strtok(NULL,tip); 此处不用继续输入str1
*}
*/
strtok_s(str1,tip,&addr); //安全的拆分函数,增加一个变量记录字符串处理位置,其它同上。
//转换