目录
字符串有关库函数介绍及使用
简述
1.strlen的使用及实现
strlen函数是用于计算字符串长度的函数,字符串是以’\0’作为结束标志的,故strlen计算第一次遇到’\0’前的字符个数。
strlen函数的实现方式有三种:
1.计数器法
通过count变量来统计字符串中’\0’前的字符个数
int my_strlen(const char* str)
{
assert(str);//避免对NULL解引用
int count = 0;
while (*str++)
{
count++;
}
return count;
}
2.递归法
不借助临时变量通过递归找到’\0’并返回其前字符个数
int my_strlen(const char* str)
{
assert(str);
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
3.指针-指针法
由于指针与指针的差是两指针间的元素个数,故通过指针作差可以计算字符串的长度
int my_strlen(const char* str)
{
assert(str);
char* start = (char*)str;
char* end = (char*)str;
while (*end)
{
end++;
}
return end - start;
}
【注意】
1.由于字符串是以’\0’为结束标志的,故以下两个语句之间有区别:
int main()
{
char str1[] = "never give up";
char str2[] = { 'a','b','c' };
printf("%d\n", my_strlen(str1));
printf("%d\n", my_strlen(str2));
return 0;
}
对于str1其在字符串末尾隐藏了’\0’,而对于str2,由于不确定’\0’的位置,因此所求出的字符串长度是随机值。
2.库中strlen函数的形式为:size_t strlen ( const char * str );
其返回类型是size_t,即无符号整形,因为其认为字符串函数是非负的,但这可能在实际使用中出现问题,比如strlen(“abc”) - strlen(“abcdef”)是大于0的(因二者皆为无符号整形,始终非负)。
2.strcmp的使用及实现
int strcmp ( const char * str1, const char * str2 );
strcmp函数是依次比较字符串中的字符的函数,若字符相同则返回0,遇到第一个不相同的字符,则比较其ASCII码值,str1大于str2则返回大于0的数,str1小于str2则返回小于0的数。
函数的实现非常简单:
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)//判断两字符串是否相等
{
if (*str2 == '\0')//相等则返回0
{
return 0;
}
else
{
str1+