当前位置:首页 » 《随便一记》 » 正文

自个实现的字符串函数(用C语言)strlen,strcmp,strcpy,strcat,strstr;_i_Crave的博客

27 人参与  2021年11月22日 10:04  分类 : 《随便一记》  评论

点击全文阅读


一、strlen计算字符串长度函数;

C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。

C 库函数 – strlen() | 菜鸟教程 (runoob.com)

手写:(三种方法)

//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(char *s)
{
   char *p = s;
   while(*p != ‘\0’ )
       p++;
   return p-s;
}

二、strcmp字符串比较函数;

C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

C 库函数 – strcmp() | 菜鸟教程 (runoob.com)

手写如下:

int my_strcmp(const char* p1, const char* p2)
{
	assert(p1 && p2);
	while (*p1 == *p2)
	{
		if (*p1 == '\0')
		{
			return 0;
		}
		p1++;
		p2++;
	}
	return *p1 - *p2;
}

三、strcpy字符串拷贝函数;

C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

C 库函数 – strcpy() | 菜鸟教程 (runoob.com)

手写如下:

char* my_strcpy(char *dest, const char *src)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest++ == *src++);


	return ret;
}

四、strcat 字符串追加函数;

C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

C 库函数 – strcat() | 菜鸟教程 (runoob.com)

手写如下:

char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest)
	{
		dest++;
	}
	while (*dest++ = *src++);
	return ret;
}

五、strstr找子串函数;

C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

C 库函数 – strstr() | 菜鸟教程 (runoob.com)

手写如下:

 char* my_strstr(const char* s1, const char* s2)
{
	assert(s1&&s2);
	if (*s2 == '\0')
		return (char *)s1;
	char* ch1 = (char *)s1, *ch2 , *q;
	while (*ch1)
	{
		ch2 = (char *)ch1;
		q = (char *)s2;
		while (*ch2 && *q && *ch2 == *q)
		{
			ch2++;
			q++;
		}
		if (*q == '\0')
		{
			return ch1;
		}
		ch1++;
	}
	return NULL;
}


点击全文阅读


本文链接:http://zhangshiyu.com/post/31156.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1