一:字符分类函数
c语言中有一系列函数,可以对字符进行分类。也就是一个字符是属于哪类型的字符。这些都有相同的头文件<type.h>
函数 如果它的参数符合下列条件就返回真
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车'\r',制表符'\t',或垂直制表符'\v'
isdigit 十进制数字0~9
isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F
islower 小写字母a~z
isupper 大写字母A~Z
isalpha 字母a~z或A~Z
isalnum 字母或数字a~z,A~Z或0~9
ispunct 标点符号,任何不属于数字或字母的图像字符(可打印符号)
isgraph 任何图像字符
isprint 任何可打印字符,包括图像字符和空白字符
二:字符转换函数
1:strlen
strlen函数是一个字符串处理函数,用于获取字符串的长度。 它根据字符串结束的'0'字符来确定长度,并返回实际字符的个数。 strlen函数只适用于获取字符串的长度,不适用于其他类型的变量。
size_t strlen ( const char * str );
这是从cplusplus的解释。
可以看出它处理的对象是字符串
返回值是字符串的长度
返回类型是无符号整数
2:strcpy
strcpy可以理解为string copy顾名思义为字符的复制,
char * strcpy ( char * destination, const char * source );
处理对象还是字符串,
返回值就是复制之后的字符串,
括号里面的第一个字符串是要复制的对象,第二个是源头,即提供复制的东西
注意:源头的\0也会复制过去
3:strcat
用于将一个字符串追加到另一个字符串的结尾
char * strcat ( char * destination, const char * source )
这个的用法跟上一个差不多,只是功能不一样。
注意:第一要找到目标字符串的\0
二:拷贝源头字符串的数据到目标空间的\0位置及其后面的空间
4.strcmp
strcmp可以理解为string compare
顾名思义,是两个字符串的比较
int strcmp ( const char * str1, const char * str2 )
比较对应位置上的字符大小,小的字符的字符串,小于另外一个字符串
注意:不是比较字符串的长度
5:strncpy strncat strncmp
因为 strcpy strcat strcmp 的长度不受限制的字符串函数,所以有一定的危险,在vs中就会报错
而strncpy strncat strncmp 这些字符串函数是规定了相应的长度,更加的安全
那么就用strncpy来举例
char * strncpy ( char * destination, const char * source, size_t num );
可以看出不同之处在于后面加了限制条件,即规定了拷贝源头的字符串的个数
三:字符转换函数的模拟实现
1:strlen
这里用递归的方法更加简单
int My_strlen(const char arr[])
{
if (*arr == '\0')
return 0; 这里用递归非常简单,但是如果不明白的话,理解就有
难度了
else
return 1 + My_strlen(arr + 1);
}
int main()
{
char arr[] = "asdfwf";
int ret=My_strlen(arr);
printf("%d", ret);
return 0;
}
2:strcpy
char* My_strcpy(char* dest, char* soce)
{
char* ret = dest;
assert(dest && soce);
while (*dest++ = *soce++) 因为是先用dest和soce然后再加1这样就可以一个一个换,直到换到源头
的\0,这也停止运转。
{
;
}
return ret;
}
int main()
{
char arr1[20] = { 0 };
char arr2[] = "123334";
printf("%s", My_strcpy(arr1, arr2));
return 0;
}
3:strcat
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest && src);
1. 找到目标空间的\0
while (*dest)
{
dest++;
}
//2. 拷贝
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
my_strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
4:strcmp
int My_strcmp(char* arr1, char* arr2)
{
if (*arr1 == *arr2)
{
*arr1++;
*arr2++;
if (*arr1 == *arr2 == '\0')
return 0;
}
else if (*arr1 > *arr2)
return 1;
else
return -1;
}
int main()
{
char arr1[] = "124442";
char arr2[] = "3543645";
int ret = My_strcmp(arr1, arr2);
printf("%d", ret);
return 0;
}
希望看官有所收获,希望点一个免费的小赞赞!!!!!!!!!!!!谢谢啦!!!!!!!!!