您的位置:首页 > 其它

C和指针之字符串简单实现 strcpy、strcat、strstr函数

2017-11-22 22:28 351 查看

1、实现strcpy函数

#include <stdio.h>

//简单实现strcpy函数
char *my_strcpy(char *des, const char *src)
{
if (des == NULL || src == NULL)
return des;
char *result = des;
while ((*des++ = *src++) != '\0');
return result;
}

int main()
{
char des[20];
const char *src = "chenyu";
printf("des is %s, and my_strcpy result is %s\n", des, my_strcpy(des, src));
return 0;
}
结果:

des is chenyu, and my_strcpy result is chenyu

2、实现 strcat函数

#include <stdio.h>

//简单实现strcat函数
char *my_strcat(char *des, const char *src)
{
if (des == NULL || src == NULL)
return des;
char *result = des;
//把指针移到末尾
while (*des)
des++;
printf("*des is %c\n", *des);
while ((*des++ = *src++) != '\0');
return result;
}
int main()
{
char des[30] = "chenyu";
const char *src = "hello";
printf("des is %s and my_strcat result is %s\n",des, my_strcat(des, src));
return 0;
}


结果:
*des is
des is chenyuhello and my_strcat result is chenyuhello

3、实现strstr函数

#include <stdio.h>
#include <string.h>

//简单实现strstr函数
char *my_strstr(const char *des, const char *src)
{
if (des == NULL || src == NULL)
return des;
const char *save_src = src;
while (*des != '\0')
{
const char *save_des = des;
while (*save_des == *save_src && *save_des != '\0' && *save_src != '\0')
{
save_des++;
save_src++;
}
//满足条件的时候记得返回des,而不是save_des,因为这个时候,save_des指针已经跑到后面去了
if (*save_src == '\0')
return des;
//不匹配再次赋值src给save_src
save_src = src;
//指针向右移动,不然会死循环
++des;
}
return NULL;
}

int main()
{
const char *des = "chenyuhello";
const char *src_one = "wc";
const char *src_two = "he";
printf("mystrstr result_one is %s\n", my_strstr(des, src_one));
printf("strstr result_one is %s\n", strstr(des, src_one));
printf("mystrstr result_two is %s\n", my_strstr(des, src_two));
printf("strstr result_two is%s\n", strstr(des, src_two));
return 0;
}

结果:
mystrstr result_one is (null)
strstr result_one is (null)
mystrstr result_two is henyuhello
strstr result_two ishenyuhello
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐