部分字符串函数的使用 与 函数实现



提示:以下是本篇文章正文内容,下面案例可供参考

一.strlen函数

1.函数的声明与使用

函数的声明
size_t strlen(const char *str)

参数
str – 要计算长度的字符串。

返回值
该函数返回字符串的长度。

函数的使用:

#include <stdio.h>
int main()
{
	char arr[] = "shu awhd";
	
	printf("arr字符串长度:%d", strlen(arr));
	return 0;
}

运行结果:
在这里插入图片描述

2.strlen函数的模拟实现

size_t  my_strlen(const char* arr) //size_t 无符号整数
{
	assert(arr);//判断指针是不是空指针
	int count = 0;
	while (*arr != '\0')
	{
		count++;
		arr++;
	}
	return count;
 
}

二.strcpy函数

1.函数的声明与使用

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

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

声明
下面是 strcpy() 函数的声明。

char *strcpy(char *dest, const char *src)
参数
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
返回值
该函数返回一个指向最终的目标字符串 dest 的指针。

#include <stdio.h>
int main()
{
	char arr1[20] = "abcdefgsshhhhsssj";
	char arr2[20] = "hello friends";
	
	printf("修改前arr1:%s\n", arr1);
	
	strcpy(arr1, arr2);
	
	printf("修改后arr1:%s\n", arr1);
	return 0;
}

运行结果:
在这里插入图片描述

2.strcpy函数的模拟实现

char* my_strcpy(char* s1,const char* s2)

{
	assert(s1 && s2);
	char* ret = s1;

	/*while (*s2 != '\0')
	{
		*s1 = *s2;
		s2++;
		s1++;
	}
	*s1 = *s2;*/

	//改良写法
	while ((*s1++ = *s2++) != '\0')
	{
		;
	}
	return ret;
}

三.strncpy函数

描述
C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

声明
下面是 strncpy() 函数的声明。
char *strncpy(char *dest, const char *src, size_t n)

参数
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
n – 要从源中复制的字符数。

返回值
该函数返回最终复制的字符串。

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

int main()
{
	char str1[] = "To be or not to be";
	char str3[40];
	strncpy(str3, str1, 5);

	puts(str3);
	//没有手动加上终止符在打印时会出问题

	str3[5] = '\0';
	//由于strncpy不会自行加上终止符,需要手动加上
	puts(str3);

	return 0;
}

代码结果
在这里插入图片描述

四.strcat函数

1.函数的声明与使用

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

声明
下面是 strcat() 函数的声明。
char *strcat(char *dest, const char *src)

参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src – 指向要追加的字符串,该字符串不会覆盖目标字符串。

返回值
该函数返回一个指向最终的目标字符串 dest 的指针。

函数用例

#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[50]="hello";
	char arr2[50]=" everyone";
	printf("使用strcat函数前arr1: %s\n\n", arr1);
	strcat(arr1, arr2);
	printf("使用strcat函数后arr1: %s\n\n", arr1);
	return 0;
}

运行结果
在这里插入图片描述

2.strcat函数的模拟实现

char*  my_strcat(char* dest, const char* str)
{
	
	char* ret = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while ( ( *dest++ =  *str++) != '\0')
	{
		;
	}

五.strncat函数

描述
C 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

声明
下面是 strncat() 函数的声明。

char *strncat(char *dest, const char *src, size_t n)
参数
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
src – 要追加的字符串。
n – 要追加的最大字符数。
返回值
该函数返回一个指向最终的目标字符串 dest 的指针。

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

int main()
{
	char src[50], dest[50];

	strcpy(src, "pcs ");
	strcpy(dest, "shdha asd hdw f asd");

	strncat(src, dest, 10);

	printf("最终的目标字符串: %s\n", src);

	return 0;
}

运行结果
在这里插入图片描述

六.strcmp函数

1.函数的声明与使用

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

声明
下面是 strcmp() 函数的声明。
int strcmp(const char *str1, const char *str2)

参数
str1 – 要进行比较的第一个字符串。
str2 – 要进行比较的第二个字符串。

返回值
该函数返回值如下:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
注:不是比较长度,而是比较字符串中对应位置字符的大小,相同就比较下一对,直到不同,或者都遇到\0

函数用例

#include  <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "sdjshdf";
	char arr2[] = "sdsncah";
	printf("%d",strcmp(arr1, arr2));
	return 0;
}  //该代码结果小于0;

2.strcmp函数的模拟实现

int my_strcmp(const char* s1,const char* s2)
{
	while (*s1 == *s2)
	{
		if (*s2 == '\0')//2个字符串都为\0时
		{
			return 0;
		}
		s1++;
		s2++;
	}
	if (*s1 > *s2)
		return 1;
	else
		return -1;
}

七.strstr函数

#1.函数的声明与使用

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

声明
下面是 strstr() 函数的声明。
char *strstr(const char *haystack, const char *needle)

参数
haystack – 要被检索的 C 字符串。
needle – 在 haystack 字符串内要搜索的小字符串。

返回值
该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

函数用例:

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


int main()
{
	
	char arr1[] = "xcsfhdswadws";
	char arr2[] = "swadw";
	
	char* ret = strstr(arr1, arr2);
	if (NULL == ret)
	{
		printf("找不到子串");
	}
	else
	{
		printf("%s\n\n", ret);
	}
	
	return 0;
}

运行结果:
在这里插入图片描述

2.strstr函数的模拟实现

char*   my_strstr( char* dest, char* str)
{
	
	char* s1 = dest;
	char* s2 = str;

	char* ret = dest;
	while (*ret)
	{
		s1 = ret;
		s2 = s2;
		while (*s1 && *s2 && ( *s1 == *s2))
		//当*s1=*s2时,往后找下一个字符
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return ret;
			//当s2为'\0'时说明已经找到,返回ret
		}
		ret++;
	}
	return NULL;
 }

八.strtok函数

函数原型:
char* strtok (char* str,constchar* delimiters );
函数功能:
   切割字符串,将str切分成一个个子串
函数参数:
   str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。
   delimiters:表示切割字符串(字符串中每个字符都会 当作分割符)。
函数返回值:
  当s中的字符查找到末尾时,返回NULL;
  如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针。

函数用例:

#include<stdio.h>
#include <string.h>
int main()
{
	char arr[] = "awjs@wjdw$wjdg&s";
	char arr1[] = "@$&";
	
	printf("%s\n", strtok(arr, arr1));  //只找第一个标记
	printf("%s\n", strtok(NULL, arr1));  //从保存好的位置开始继续往后找
	printf("%s\n", strtok(NULL, arr1));  //从保存好的位置开始继续往后找
	printf("%s\n", strtok(NULL, arr1));  //从保存好的位置开始继续往后找
	return 0;
}

代码结果:
在这里插入图片描述


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值