实现strlen strcat 用 do while ,while

//strcpy源字符串必须以 ‘\0’ 结束。
//会将源字符串中的 ‘\0’ 拷贝到目标空间。
//目标空间必须足够大,以确保能存放源字符串。
//目标空间必须可变。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>

char* my_strcpy1(char* des, const char* sourse)
{
	char* ret = des;
	assert(des&&sourse);
	while (*sourse)
	{
		  *des++=* sourse++;
		  
	} 
	*des = *sourse;
	return ret;
}
char* my_strcpy2(char* des, const char* sourse)
{
	char* ret = des;
	assert(des&&sourse);
	do
	{
		*des++ = *sourse;//*des=*sourse; des++;

	} while (*sourse++);

	return ret;
}

char *my_strcpy3(char *dest, const char*src)
{
	char *ret = dest;
	assert(dest != NULL);

	assert(src != NULL);
	while ((*dest++ = *src++))
	{
		;
	}

	return ret;
}

int main()
{
	char string1[] = "hello";
	char string2[100] ;
	printf("%s\n", my_strcpy1(string2, string1));
	printf("%s\n", my_strcpy2(string2, string1));
	printf("%s\n", my_strcpy3(string2, string1));
	return 0;

}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>

char *my_strcat(char *dest, const char*src)
{
	char *ret = dest;
	assert(dest&&src);
	while (*dest)
	{
		dest++;
	}

	while ((*dest++ = *src++))
	{
		;
	}

	return ret;
}

int main()
{
	char string1[] = "hello";
	char string2[100]="world" ;
	printf("%s\n", my_strcat(string2, string1));
	return 0;

}
在C语言标准库中,`strlen()`, `strcat()`, 和 `strcmp()` 是非常常见的字符串处理函数,它们分别用于计算字符串长度、连接两个字符串和比较字符串的内容。如果你想要自定义实现这些功能,下面我会为你简单介绍如何实现: 1. **strlen()** (计算字符串长度) - C标准库中的 `strlen()` 函数使用了预处理器宏,实际上是递归地检查每个字符直到遇到空字符 '\0'。自实现时,你可以用类似循环的方式遍历字符串,统计非空字符的数量(不包括结束符)。 ```c size_t my_strlen(const char *str) { size_t len = 0; while (*str != '\0') { len++; str++; } return len; } ``` 2. **strcat()** (连接字符串) - 标准库中的 `strcat()` 会在第一个字符串后追加第二个字符串。自实现时,你需要确保足够的空间,然后逐个复制字符,同时保持第一个字符串的结束符不变。 ```c char* my_strcat(char* dest, const char* src) { size_t dest_len = my_strlen(dest); if (dest_len == 0 || (dest + dest_len) >= &(*dest)[strlen(dest)] + 1) { // 检查是否有足够的空间 // 如果没有,动态分配或扩展内存 // 这里假设有足够的内存,否则添加错误处理代码 } while (*src != '\0') { *(dest++) = *(src++); } *(dest++) = '\0'; // 添加结束符 return dest; } ``` 3. **strcmp()** (比较字符串) - `strcmp()` 比较两个字符串是否相等,如果完全相同返回0,不同则根据字典序返回正负值。自实现时,也需要遍历字符串直到找到不匹配的字符或到达结束符。 ```c int my_strcmp(const char* str1, const char* str2) { while (*str1 != '\0' && *str2 != '\0') { if (*str1 < *str2) { return -1; } else if (*str1 > *str2) { return 1; } str1++; str2++; } // 如果其中一个字符串结束而另一个还没,则未结束的那个更长 if (*str1 == '\0' && *str2 != '\0') { return 1; // str2 更长 } else if (*str1 != '\0' && *str2 == '\0') { return -1; // str1 更长 } return 0; // 同样长度,视为相等 } ``` 请注意,自定义这些函数时,你需要考虑边界条件、内存管理以及异常情况,例如空指针、数组越界等问题。此外,C标准库提供的版本已经经过优化,性能通常优于简单的迭代实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值