文章目录
字符函数
使用时需要包含头文件<ctype.h>
字符分类函数
字符分类函数是一系列函数,用于判断该字符是否是符合的字符类型。
if(islower('a'))
{
printf("是小写\n");
};
在以上代码中,islower函数能够判断a是否为小写字母并返回一个值,如果是则返回非零,反之则返回零
字符转换函数
tolower
函数能够将字符串中所有的大写字母转化成小写
toupper
函数能够将字符串中所有的小写字母转化成大写
字符串函数
strlen的使用和模拟实现
char arr = {"abcd"};
size_t i = strlen(arr);
printf("%zd\n", i);
它能够计算出给定字符串的长度(不计\0),返回值是size_t
,一种无符号整数,打印时占位符使用%zd
模拟实现思路:遍历字符串,每经过一个字符计数器就加一,直到遇到\0
size_t Strlen(char* str)
{
size_t count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
也可以使用递归的方式
size_t Strlen(char* str)
{
if(*str)
return 1 + Strlen(str + 1);
else
return 0;
}
strcpy的使用的和模拟实现
strcpy函数能够用于将一个字符串的内容拷贝到另一个字符串里面,返回值是目标字符串首字符地址
char arr1 = "";
char arr2 = "abcde";
printf("%s\n", strcpy(arr1, arr2));//返回了arr1的地址,所以可以一直向后打印
**模拟实现思路:**遍历字符串,修改str1的内容
char* Strcpy(char* str1, char* str2)
{
assert(str1 && str2);
char* ret = str1;
while(*str1 = *str2)
{
str1++;
str2++;
}
return ret;
}
strncpy的使用和模拟实现
strcpy有一个不足之处,就是没有办法自己拷贝到自己的最后面,不然会因为’\0’的缺失而导致程序崩溃。
strncpy能够拷贝一定大小的字符串,并主动加上’\0’,所以它比strcpy多一个参数size_t num
,传入的是需要拷贝的字节数
模拟实现思路: 大致和strcpy相同,不过需要加上一个循环次数
char* Strcpy(char* str1, char* str2, size_t num)
{
che* ret = str1;
while(num)
{
*str1 = *str2;
str1++;
str2++;
num--;
}
*str1 = '\0';
return ret;
}
strcat的使用和模拟实现
这个函数可以将一个字符串内容拷贝到另一个字符串的最后面
**模拟实现思路:**首先让str1的指针指向数组的’\0’,再将要拷贝的内容填充上去
char* Strcat(char* str1, const char* str2)
{
assert(str1 && str2);
char* ret = str1;
while(*str1)
{
str1++;
}
while(*str2)
{
*str1 = *str2;
str1++;
str2++;
}
str1 = '\0';
return ret;
}
strncat的使用
和strncpy一样,strncat与strcat的区别就是strncat多一个size_t num
参数,用来指定拷贝的字节数
strcmp的使用和模拟实现
strcmp用于比较字符串的大小(依据为ASCII码值的大小),如果前面的字符串>后面的字符串,返回一个正数;如果相等,返回零;如果前面<后面,返回一个负数
模拟实现思路: 如果两个字符相等,就继续往后走,如果不相等就判断大小
int Strcmp(char* str1, char* str2)
{
assert(str1 && str2);
while(*str1 == *str2)
{
str1++;
str2++;
if(*str1 == '\0' && *str2 == '\0')
return 0;
}
if(*str1 > *str2)
return 1;
else
return -1;
}
strncmp的使用
同样的,需要多传入一个参数限制比较的字节数
strstr的使用
strstr函数能够在一个字符串中找另一个字符串是否包含于这个字符串,
如果找到了,返回第一个找到的首元素地址,没找到返回NULL;
如果要找的字符串为空,返回被查找的字符串的首元素地址
char arr1 = "abcedf";
char arr2 = "ced";
printf("%s\n", strstr(str1, str2));
strstr的模拟实现有两种算法,BF算法和KMP算法,等我有时间会详细解读
strtok的使用
strtok可以拿出被分隔符分隔的字符串中的内容
它包含两个参数,一个是原字符串,一个是分隔符字符串
char* strtok(char* str, const char* delimiters)
当str不为NULL时,函数会找到str中第一个delimiters中写入的分隔符,并置为’\0’
当str为NULL时,函数会找到第一次分割开的位置,继续找下一个分隔符
char arr[] = "TraStel@stu.123.cn";
char sep[] = "@."
printf("%s\n", strtok(arr, sep));
printf("%s\n", strtok(NULL, sep));
printf("%s\n", strtok(NULL, sep));
//这里如果不是NULL而是arr的话,结果和上一条代码一样打印TraStel
strerror的使用
在写代码时,可能会有各种语法错误,每一个错误都有对应的编号,在strerror函数中传入该编号就可以打印对应的错误信息
for(int i = 0; i < 10; i++)
{
printf("strerror(%d) : %s\n", i, strerror(i));
}