【C语言】字符串函数介绍(strlen,strcpy,strcmp,strcat,strstr)


一、字符串函数

1.strlen

size_t strlen(const char*str);

1.参数
str – 要计算长度的字符串
2.返回值
该函数返回字符串的长度(无符号整形)
3.结束条件
遇到‘\0’则停止,若无‘\0’则到最后打印随机值

以下是cplusplus的官方解释:

在这里插入图片描述求字符串长度的,统计的是字符串中\0之前出现的字符个数

自我实现strlen函数:

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

size_t my_strlen(const char*str){
   assert(str);
   const char*start=str;
   const char*end=str;
   while(*end){
   end++;
   }
   return end-start;
}

2.strcpy

char * strcpy ( char * destination, const char * source );

把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

1.参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src – 指向要追加的字符串,该字符串不会覆盖目标字符串。
2.返回值
该函数返回一个指向最终的目标字符串 dest 首地址的指针。

以下是cplusplus的官方解释:
在这里插入图片描述
strcpy是用来复制字符的,将source 指向的 C 字符串复制到destination指向的数组中,包括终止的空字符(并在该点停止)。
为避免溢出,destination指向的数组的大小应足够长,以包含与source相同的 C 字符串(包括终止的空字符),并且不应在内存中与source重叠。

自我实现strcpy函数:

#include <stdio.h>
#include <string.h>
#include<assert.h>
char *my_strcpy(char*dest,const char*src){
      char*ret=dest;
      assert(dest&&src);
      while(*dest++=*src++);
      return ret;
}

3.strcmp

int strcmp(const char *s1,const char *s2);

1.参数
>s1– 指向字符串的指针
s2– 指向字符串的指针
2.返回值
自左向右逐个按照ASCII码值进行比较,直到出现不同的字符或遇’\0’为止。
如果返回值 < 0,则表示 s1 小于 s2。
如果返回值 > 0,则表示 s1 大于 s2。
如果返回值 = 0,则表示 s1 等于 s2。

以下是cplusplus的官方解释:
在这里插入图片描述
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或到达终止空字符。(比较ASCII值)
在这里插入图片描述

自我实现strcmp函数:

int my_strcmp(const char* s1, const char* s2) {
	assert(s1&& s2);
	while (*s1 == *s2) //如果值得ascii的值相等就进入循环,若不相等直接退出循环
	{
		if (*s1 == '\0')return 0;
		s1++;
		s2++;
	}
	return *s1 - *s2;//两个ascii的值得差
}

4.strcat

char* strcat(char* des, const char* sor)

strcat函数又被称为是字符串追加/连接函数,它的功能就是在一个字符串后面追加上另外一个字符串。

1.参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src – 指向要追加的字符串,该字符串不会覆盖目标字符串。
2.返回值
该函数返回一个指向最终的目标字符串 dest 首地址的指针。

在这里插入图片描述
将源字符串的副本附加到目标字符串。destination中的终止空字符被source的第一个字符覆盖,并且在destination中两者连接形成的新字符串的末尾包含一个空字符。(最终字符串和原字符不得重叠。)

自我实现strcat函数:

char* my_strcat(char* des, const char* sor) {
	assert(des && sor);
	char* ret = des;
	while (*des)//先将dest指向末尾防止sor覆盖原数据
	{
		des++;
	}
	while (*des++ = *sor++);
	return des;
}

5.strstr

char* strstr(const char* str1,const char* str2)

strstr()是一个参数为两个字符指针类型,返回值是char*类型的函数,它用于找到子串(str2)在一个字符串(str1)中第一次出现的位置。

1.参数
str1-- 指向目标数组,该数组包含了一个C字符串。
str2 – 指向要包含要匹配的字符序列的 C 字符串。。
2.返回值
指向str2中指定的整个字符序列的 第一次出现在str1中的指针,如果该序列不存在于str1中,则为空指针。。

在这里插入图片描述
返回指向 str1 中第一次出现str2的指针,如果str2不是 str1 的一部分,则返回空指针。 匹配过程不包括终止的空字符,但它会停在那里。

实例:

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

int main()
{
	char str[] = "This is a simple string";
	char* pch;
	pch = strstr(str, "simple");
	printf(pch);//simple string
	return 0;
}

自我实现strstr函数:

const char* my_strstr(const char* s1, const char* s2) {
	const char* t1 = s1;
	const char* t2 = s2;
	//实现挨个s1的字符,遍历s2
	while (*s1) {
		t1 = s1;
		t2 = s2;
		while (*t1 == *t2 && *t1 != '\0' && *t2 != '\0')//以便遇到连续s2的字符串,不连续则下个指向S1下个字符
		 {
			t1++;
			t2++;
		}
		if (*t2 == '\0')return s1;
		s1++;
	}
	return NULL;
}
  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuhyOvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值