1、自定义函数(my_strlen)实现strlen函数的功能
#include<stdio.h>
//求字符串的长度
int my_strlen(char *arr)
{
if(*arr=='\0') //如果出现\0,就返回0
{
return 0;
}else
{
return 1+my_strlen(arr+1); //地址+1,往后走
}
}
int main(int argc, char const *argv[])
{
char str[100]={0};
printf("输入一串字符串:");
gets(str); //输入
int len=my_strlen(str);
printf("这个字符串的长度是:%d\n",len);
return 0;
}
2、自定义函数(my_strcpy)实现strcpy函数的功能
//自定义函数函数(my_strcpy)实现strcpy函数的功能
#include<stdio.h>
void my_strcpy(char *one, const char *two)
{
while(*two) //遍历*two
{
*one=*two; //赋值
*two++; //指针后移
*one++;
}
*one='\0'; //末尾加上\0
}
//主函数
int main(int argc, char const *argv[])
{
char str[100]="";
char sin[100]="";
printf("要拷贝的字符串为:");
gets(str);
my_strcpy(sin,str);
printf("拷贝出的字符串为:%s\n",sin);
return 0;
}
3、白定义函数(my_strcmp)实现strcmp函数的功能
strcmp功能:比较两个字符串的大小
#include<stdio.h>
int my_strcmp(char *abc,char*def)
{
while(*abc&&*def)
{
if(*abc>*def)
{
return 1;
}else if(*abc<*def)
{
return -1;
}else
{
*abc++;
*def++;
} //相等时,一直到其中一个到\0时循环结束
}
if(*abc) //如果此时*abc不等于\0,即为真
{
return 1;
}
else if(*def) //如果此时*def不等于\0,即为真
{
return -1;
}else //如果此时*abc和*def都等于\0,即为真
{
return 0;
}
}
//主函数
int main(int argc, char const *argv[])
{
char str[100]={0};
char sin[100]={0};
printf("输入第一个字符串:");
gets(str);
printf("输入第二个字符串:");
gets(sin);
int n=my_strcmp(str,sin);
if(n==1)
{
printf("第一个字符串大\n");
} else if(n==-1)
{
printf("第二个字符串大\n");
}else
{
printf("两个一样大\n");
}
return 0;
}
4、自定义函数(my_strcat)实现strcat函数的功能
strcat功能:将后面的字符串加到前面字符串后面
//自定义函数(my_strcat)实现strcat函数的功能
#include<stdio.h>
void my_strcat(char *one,char *two)
{
while(*one) //将*one遍历到\0时结束
{
*one++; //每次循环后移一位
}
*one=*one-1; //指针前移到\0前面
while(*two)
{
*one=*two; //将*two加到*one 后面
*one++;
*two++;
}
*one='\0'; //在*one结尾加上\0
}
//主函数
int main(int argc, char const *argv[])
{
char str[100]={0};
char sin[100]={0};
printf("输入第一个字符串:");
gets(str);
printf("输入第二个字符串:");
gets(sin);
my_strcat(str,sin);
printf("连接后结果为:%s\n",str);
return 0;
}
5、自定义函数(my_strstr)实现求src字符串中是否包含子串dest字符串
strstr功能:判断前字符串是否包含后字符串,即判断后字符串是否是前字符串的子字符串。
#include<stdio.h>
int my_strstr(const char *one,const char *two)
{
const char* a = one;
const char* b = two; //记录子串当前字符串
char* c = one; // *a==*c==one *b==two
while(*c)
{
a=c; //每次内循环结束,将c的值赋给a
b=two; //每次内循环结束,将two的值赋给b,two是固定值,这样b每次都是重新开始
while(*a==*b&&*a!='\0'&&*b!='\0')
{
*a++; //该循环内,*a和*b都改变,但循环结束后又会重新赋值
*b++;
}
if(*b=='\0')
{
return 1;
}
*c++;
}
return 0;
}
//主函数
int main(int argc, char const *argv[])
{
char str[100]={0};
char sin[100]={0};
printf("输入第一个字符串:");
gets(str);
printf("输入第二个字符串:");
gets(sin);
int k=my_strstr(str,sin);
if(k==1)
{
printf("包含\n");
}else
{
printf("不包含\n");
}
return 0;
}