常用字符串详解

strlen()

详解

    .函数返回类型:size_t   无符号整形  因为字符串长度
    不可能为负数。
    .参数:一个字符串
    函数模型:size_t strlen(const char *str);

作用

        求字符串的长度。由于字符串以’\0‘作为结束标志
        ,strlen函数返回的是在字符串中'\0'前面出现的
        字符个数(不包括‘\0')。

使用注意事项

     .参数指向的字符串必须要以’\0‘结束。
     .注意函数的返回值为size_t,是无符号的(易错)

模拟实现

第一种方式

//指针-指针的方式
int my_strlen(char* a)
{
	assert(a);
	char* p = a;
	while (*p != '\0')
	{
		p++;
	}
	return p - a;
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

第二种

//不能创建临时变量计时器
int my_strlen(const char* a)
{
	assert(a);
	if (*a == '\0')
		return 0;
	else
		return 1 + my_strlen(a + 1);
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

第三种方式

int my_strlen(const char* arr)
{
	int count = 0;
	assert(arr);
	while (*arr);
	{
		count++;
		arr++;
	}
	return count;
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

strcpy()

详解

     .函数模型:char *strcpy(char *str1,const char *str2);
     .参数:目标字符串和被拷贝字符串

作用及注意事项

   .字符串拷贝,将字符串str2的内容拷贝到字符串str1中
   .原字符串必须以’\0'结束。
   .会将原字符串中的‘\0'拷贝到目标空间。
   目标空间必须足够大,以确保能存放原字符串。
   目标空间必须可变。

模拟实现

char * my_strcpy(char* dest,const char *str)
{
	char* ret = dest;
	assert(dest);
	assert(str);
	while (*dest++ = *str++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[] = "****************";
	char arr2[] = "abcd";
	printf("%s\n", my_strcpy(arr1, arr2));
	return 0;
}

strcat()

详解

  .函数模型:char* strcat(char *str1, const char *str2);

作用机注意事项

 .将字符串str2追加到字符串str1后面
 .原字符串必须以’\0'结束。
 .目标字符串中也得有‘\0',否则没办法知道追加从哪里开
 始。
 .目标空间必须足够大,能容纳下原字符串的内容。目标空
 间必须可修改。

模拟实现

char* my_stract(char* dest, const char* src)
{
	assert(dest);
	assert(src);
	char* p = dest;
	//找到\0;
	while (*++dest)
	{
		;
	}
	//追加字符串
	while (*dest++ = *src++)
	{
		;
	}
	return p;
}
int main()
{
	char str1[20] = "abcd";
	char str2[] = "efg";
	my_stract(str1, str2);
	printf("%s\n", str1);
		return 0;
}

还有strncat()函数相比较于strcat函数多了一个参数是可以控制追加的数量

strcmp()

详解

  .函数模型:int strcmp(const char*string1,const char*string2)

作用及注意事项

  .比较字符串大小内容(不是长度)(ASCLL值),若string1>string2,返回一个大于0的数,若string1=string2,
  返回0,若string1<string2,返回小于0的数。

模拟实现

int my_strcmp(const char* str1, const char* str2)
{
	int ret = 0;
	assert(str1);
	assert(str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	char str1[] = "bcd";
	char str2[] = "bcg";
	int ret = my_strcmp(str1, str2);
	printf("%d", ret);
	return 0;
}

strncmp()函数

   .同上个函数相同,比strcmp()函数多了一个参数,比
   较的个数。

strstr()

详解

  .函数模型:char*strstr(const char*str,const char*arr)

作用

  .字符串查找函数,如果字符串arr在字符串string中,
  返回第一次出现的位置的指针,若不在string中,则
  返回空指针。

模拟实现

//strstr函数的模拟实现
char* my_strstr(const char* arr1, const char* arr2)
{
	//断言
	assert(arr1);
	assert(arr2);
	char* p1;
	char* p2;
	char* cp = arr1;//记录可能成功的值;
	while (*cp != '\0')
	{
		p1 = cp;
		p2 = arr2;
		//while(*p1&&*p2&&*p1==*p2)
		while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2)
		{
			p1++;
			p2++;
		}
		if (!*p2)
			return cp;
		cp++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "I am a good boy";
	char arr2[] = "good";
	char* ret = my_strstr(arr1, arr2);
	printf("%s\n", ret);
	return 0;
}

strtok()

详解

  函数模型:char * strcok(char *str, const char * sep);

作用及注意事项

  strtok()是用来切割字符串的
  .sep参数指向一个字符串,定义了用作分隔符的字符集合
  .第一个参数指定一个字符串,他包含了0个或者多个由
  sep字符串中一个或多个分隔符分割的标记。
 .strtok函数找到str中的下一个标记,并将其用’\0'结尾
 ,返回一个指向这个标记的指针。
 .strtok函数的第一个参数不为NULL,函数将找到str中的第
 一个标记,strtok函数将保存他在字符串的位置
 .strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。

实现使用strtok

int main()
{
	char arr1[] = "3103665181@qq.com.html";
	char arr2[100] = { 0 };
	strcpy(arr2, arr1);
	char sep[] = "@.";
	char* ret = NULL;
	for (ret = strtok(arr2, sep); ret != NULL; ret = strtok(NULL, sep))
	{
		printf("%s\n", ret);
	}
	/*strtok(arr2, sep);
	strtok(NULL, sep);*/
	return 0;
}

写到这里还没完全写完函数 还有其他字符串函数 如果有问题欢迎讨论
感谢大家的支持 希望我们在编程的道路上越走越远 越来越精彩!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值