目录
一、strlen函数
1.1 strlen 函数的使用
• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0' )。
• 参数指向的字符串必须要以 '\0' 结束。
• 注意函数的返回值为size_t是无符号的
• strlen的使用需要包含头文件<string.h>
可以看这么一个代码
#include <stdio.h>
#include <string.h>
int main()
{
const char* str1 = "abcdef";
const char* str2 = "bbb";
if(strlen(str2)-strlen(str1)>0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
看完这串代码,可能会有人觉得这串代码的结果会是str1>str2,毕竟3-6<0,但是上面说了strlen的返回结果为无符号整型,所以无符号的-3将会是一个大于0且很大的数,这串代码的结果应该是str2>str1。
1.2 strlen函数的模拟实现
1.计数器方式
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
2.递归方式
int my_strlen(const char * str)
{
assert(str);
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
3.指针-指针方式
int my_strlen(char *s)
{
assert(str);
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
二、strcpy函数
2.1 strcpy函数的使用
strcpy可以将一个字符串内容拷贝到另一个字符串中,和strlen函数很相似的是以源字符串‘\0’为结束标志。
• 源字符串必须以 '\0' 结束。
• 会将源字符串中的 '\0' 拷贝到目标空间。
• 目标空间必须足够大,以确保能存放源字符串。
• 目标空间必须可修改。
2.2 strcpy函数的模拟实现
#include<stdio.h>
void mystrcmp(char* arr1, const char* arr2)\\目标字符串可以被修改,源字符串不可被修改
{
while (*arr2 != '\0')\\拷贝以源字符串的'\0'为结束标志
{
*arr1 = *arr2;拷贝赋值
arr1++;
arr2++;
}
}
int main()
{
char arr1[10] = "";
char arr2[10] = "abcdef";
mystrcmp(arr1, arr2);
printf("%s", arr1);
return 0;
}
三、strcmp函数
3.1 strcmp函数的使用
strcmp函数可以通过比较字符串的每个字符的ASCII码值来判断两个字符串是否相同
◦ 第⼀个字符串大于第⼆个字符串,则返回大于0的数字
◦ 第⼀个字符串等于第⼆个字符串,则返回0
◦ 第⼀个字符串小于第⼆个字符串,则返回小于0的数字
3.2 strcmp函数的模拟实现
int my_strcmp (const char * str1, const char * str2)
{
int ret = 0 ;
assert(src != NULL);
assert(dest != NULL);
while(*str1 == *str2)//字符相同就一直比较
{
if(*str1 == '\0')//当两个字符串都到了'\0'的位置,说明两个字符串相同。
return 0;
str1++;
str2++;
}
return *str1-*str2;//有不同的字符,则比较该处字符的ASCII码值
}
四、strcat函数
4.1 strcat函数的使用
stract函数可以将一个字符串的内容追加到另一个字符串中,源字符串在目标字符串‘\0’处开始追加。
• 源字符串必须以 '\0' 结束。
• 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。
• 目标空间必须有足够的大,能容纳下源字符串的内容。
• 目标空间必须可修改。
4.2 strcat函数的模拟实现
#include<stdio.h>
void mystract(char* arr1, const char* arr2)\\目标字符串可修改,源字符串不可修改
{
while (*arr1 != '\0')\\源字符串在目标字符串'\0'处开始追加
arr1++;
while (*arr2 != '\0')\\以源字符串'\0'结束追加
{
*arr1 = *arr2;追加赋值
arr1++;
arr2++;
}
}
int main()
{
char arr1[20] = "abcde";
char arr2[20] = "fghij";
mystract(arr1, arr2);
printf("%s", arr1);
return 0;
}
五、strstr函数
5.1 strstr函数的使用
strstr函数返回子串str2在主串str1中第⼀次出现的位置,字符串的比较匹配不包含'\0'字符,以'\0'作为结束标志。
5.2 strtsr函数的模拟实现
char * strstr (const char * str1, const char * str2)
{
char *cp = str1;
char *s1, *s2;
if ( !*str2 )
return str1;
while (*cp)
{
s1 = cp;
s2 = str2;
while ( *s1 && *s2 && !(*s1-*s2) )//找相同的字符
s1++, s2++;
if (!*s2)//跳出循环后如果此时子串已经遍历完了,说明已经找到了相同地方的位置了
return(cp);
cp++;
}
return(NULL);
}
本篇内容就到这里了,希望对各位有帮助,如果有错误欢迎指出。