【C语言】字符串函数详解及实现(strlen,strcpy,strcat,strcmp)

一.strlen(求字符串长度)

函数声明如下:

int  strlen( const  char*  str) ;

函数参数为一个指向字符串的指针,返回值为一个int型

strlen函数是求一个字符串的长度,当在字符串中遇到‘\0’时,则会返回前面字符的个数。

 1.使用实例

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "abcdef";//定义一个字符串
	int ret = strlen(arr);//用strlen求arr的长度,并把返回值给ret
	printf("%d", ret);//输出ret,为6
	return 0;
}
①.模拟实现
#include<stdio.h>
#include<string.h>

int my_strlen(const char* str)
{
	int count = 0;//用一个数记录
	while (*str)//当str指向的字符不为0是,则进入while
	{
		count++;//计数++
		str++;//指针后移
	}
	return count;//返回记录的数
}

int main()
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d", ret);
	return 0;
}

二.strcpy(字符串拷贝)

函数声明如下:

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

函数参数为一个指向拷贝目的地的指针,一个指向拷贝源头的指针,返回值为指向目的地(destination)的指针.

strcpy函数是将一个字符串拷贝到另外一个字符串中,当在源头字符串遇到'\0',则拷贝结束。

1.使用实例

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

int main()
{
	char arr[] = "abcdef";
	char arr2[10] = { 0 };
	strcpy(arr2, arr);
	printf(arr2);//输出为“abcdef”
	return 0;
}
①模拟实现
#include<stdio.h>
#include<string.h>
char* my_strcpy(char* dest, const char* sour)
{
	char* ret = dest;//用ret指针保存dest指针的起始地址
	while (*sour)//如果sour指针不为0,则进入while
	{
		*dest = *sour;//把sour指针指向的字符给到dest指针指向的空间
		dest++;//dest指针后移
		sour++;//sour指针后移
	}
	return ret;//返回dest的起始地址
}

int main()
{
	char arr[] = "abcdef";
	char arr2[10] = { 0 };
	my_strcpy(arr2, arr);
	printf(arr2);//输出为“abcdef”
	return 0;
}

三.strcat(字符串追加) 

 函数声明如下:

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

函数参数为一个指向追加目的地的指针,一个指针追加源头的指针,返回值为追加目的地的起始地址。

strcat函数是将一个字符追加到另一个字符串的末尾(注意目的地字符串要有足够的空间)。

1.使用实例

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

int main()
{
	char arr[10] = "abc";
	strcat(arr, "def");
	printf(arr);//输入为abcdef
	return 0;
}
 ③.模拟实现
#include<stdio.h>
#include<string.h>

char* my_strcat(char* dest, const char* sour)
{
	char* ret = dest;//用ret保存dest的起始地址
	int count = strlen(sour);//求要追加字符串的长度
	while (*dest)//当dest指针指向的字符不为0时,则进入while
	{
		dest++;
	}//while结束后,dest指向‘c’后面的空间
	while (count)//循环count次
	{
		*dest = *sour;//把sour指向的字符给dest
		dest++;//dest指针后移
		sour++;//sour指针后移
		count--;
	}
	return ret;//放回dest的起始位置
}

int main()
{
	char arr[10] = "abc";
	my_strcat(arr, arr);
	printf(arr);//输入为abcdef
	return 0;
}

四.strcmp(字符串比较) 

函数声明如下:

int  strcmp ( const  char*  str1 , const  char*  str2) ;

函数参数为一个指向字符串的指针,另一个也为指向字符串的指针。

strcmp函数时用来比较两个字符串的,当str1大于str2时,则返回1,否则返回-1,若str1等于str2,则返回0。

1.使用实例

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

int main()
{
	char arr1[] = "abc";
	char arr2[] = "abd";
	int ret = strcmp(arr1, arr2);//arr1小于arr2,所以返回-1给ret
	printf("%d\n", ret);//输出为-1
	ret = strcmp(arr1, arr1);//arr1等于arr1,所以返回0给ret
	printf("%d\n", ret);//输出为0
	ret = strcmp(arr2, arr1);//arr2大于arr1,所以返回1给ret
	printf("%d\n", ret);//输出为1
	return 0;
}
 ①模拟实现
#include<stdio.h>
#include<string.h>

int my_strcmp(const char* str1, const char* str2)
{
	while ((*str1) == (*str2))//当str1指向的字符和str2指向的字符相等,则进入while
	{
		if ((*str1) == 0)//如果str1指向的字符等于0,即str1和str2指向的字符都为0,即它们相同
		{
			return 0;//则返回0
		}
		str1++;//str1后移
		str2++;//str2后移
	}
	if ((*str1) > (*str2))
		return 1;//如果str1指向的字符大于str2,则返回1
	else
		return -1;
}

int main()
{
	char arr1[] = "abcd";
	char arr2[] = "abc";
	int ret = my_strcmp(arr1, arr2);//arr1小于arr2,所以返回-1给ret
	printf("%d\n", ret);//输出为-1
	ret = my_strcmp(arr1, arr1);//arr1等于arr1,所以返回0给ret
	printf("%d\n", ret);//输出为0
	ret = my_strcmp(arr2, arr1);//arr2大于arr1,所以返回1给ret
	printf("%d\n", ret);//输出为1
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值