欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C语言字符串函数操作(strlen,strcpy,strcat,strcmp)详解

时间:2023-02-04 11:16:08|栏目:C代码|点击:

一.strlen函数模拟

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

有三种方法可以实现该操作:

①计数器方式

②不能创建临时变量计数器

③指针-指针

 方法一:计数器方式

int my_strlen(const char* str)
{
	int count = 0;//定义count用来记录字符串数组中字符数
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}

方法二:不能创建临时变量计数器

int my_strlen1(const char* str)//以递归的方式完成字符串长度函数的模拟
{
	if (*str == '\0')
		return 0;
	return 1 + my_strlen1(str + 1);
}

方法三:指针-指针

指针相减得到的是两个指针之间差距的元素个数,可以根据这种方式来实现strlen函数的模拟

int my_strlen2(char* s)//以此方式进行模拟时不能使用静态const
{
	char* p = s;
	while (*p != '\0')
		p++;
	return p - s;
}

测试样例

二. strcpy函数模拟

将src所指向的字符串包括‘\0’复制到dest所指向的字符串中

源字符串(src所指向的字符串)必须以‘\0’结束

目标空间需足够大,以确保能存放源字符串

int main()
{
	char s[10] = { 'a','b','c','d','e','f' };
	char s1[10] = { 'c','c','b' };
	printf("%s", my_strcpy(s, s1));//将s1中的字符复制到s空间中
	return 0;
}
char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest != NULL);//断言
	assert(src != NULL);//断言
	while ((*dest++ = *src++));
	return ret;
}

测试结果 

最终将s2中以‘\0’为结束符的字符串复制到s中 

 三.strcat函数模拟

将src所指向的字符串包括‘\0’复制到dest所指向的字符串后面

源字符串必须以‘\0’结束

目标空间*dest需足够大,以确保能够存放源字符串(*src)

char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest)//访问到dest所指向字符串的最后一个字符位置
	{
		dest++;
	}
	while ((*dest++ = *src++));//将src指向的字符串复制到dest所指向字符串的后面
	return ret;
}

 测试样例

将src指向的字符串复制到dest指向的字符串后面,最终得到结果

四.strcmp函数模拟

 strcmp函数的作用是比较字符串,用法如下strcmp(字符串1,字符串2),它会比较这两个字符串:

如果字符串1等于字符串2,strcmp函数返回0;

如果字符串1小于字符串2,strcmp函数返回一个负值;

如果字符串1大于字符串2,strcmp函数返回一个正值.

 具体实现如下:

int my_strcmp(const char* dest, const char* src)
{
	int ret = 0;
	assert(src != NULL);
	assert(dest != NULL);
	while (!(ret = *(unsigned char*)src - *(unsigned char*)dest) && *dest)
	{
		++src;
		++dest;
	}
	if (ret < 0)
		ret = -1;
	else if (ret > 0)
		ret = 1;
	return ret;
}

总结

上一篇:C++单例模式为何要实例化一个对象不全部使用static

栏    目:C代码

下一篇:没有了

本文标题:C语言字符串函数操作(strlen,strcpy,strcat,strcmp)详解

本文地址:http://www.codeinn.net/misctech/225112.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有