目录
注意:在使用string类函数时要引用string.h的头文件
strlen函数
此函数用于求字符串的长度
使用方式很简单,把字符串首元素的地址传进去就可以了,返回字符串长度
应用举例
int main()
{
char arr[] = "hello";
printf("%zd", strlen(arr));
return 0;
}
生成的结果:5
模拟实现(3种方式)
1.计数器模拟
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
2.函数递归
int my_strlen(const char * str)
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
3.指针-指针
int my_strlen(const char *s)
{
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;//首地址-末地址
}
strcpy函数
将原字符串复制到目标数组上(包括 '\0')
注意:
源字符串要以'\0'结束,并传将其传过去;目标空间要足够大,且可变。
应用举例
int main()
{
char arr1[8] = { 0 };
char arr2[] = "hello";
printf("%s", strcpy(arr1, arr2));
return 0;
}
生成的结果:hello
模拟实现
char* my_strcpy(char*dest, const char* src)
{
char* ret = dest;
assert(dest && src);//保证dest和src不为 0,注意引用头文件assert.h
while (*dest++ = *src++)
{
;
}
return ret;
}
strcmp函数
用于比较两个字符串,按位比较ASCII码值
大于0前者大,等于0一样大,小于0后者大
应用举例
int main()
{
char arr1[] = "abq";
char arr2[] = "abc";
if (strcmp(arr1, arr2) > 0)
printf(">\n");
else if(strcmp(arr1, arr2) < 0)
printf("<\n");
else
printf("=\n");
}
生成的结果: >
模拟实现(2种方法)
法1:
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
法2:
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
strcat函数
用于在目标地址后追加字符串,返回目标空间的起始地址
应用举例
int main()
{
char arr1[20] = "abc";
strcat(arr1, arr1);
printf("%s\n", arr1);
return 0;
}
模拟实现
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest && src);
//1. 找到目标空间的末尾
while (*dest != '\0')
{
dest++;
}
//2. 数据追加
while (*dest++ = *src++)
{
;
}
return ret;
}
*截图来自于cplusplus.com