分别实现strlen,strlen,strlen,strcmp,strstr,memcpy

本文详细介绍了如何使用C语言实现常见的字符串操作,包括strlen(求字符串长度)、strcpy(复制字符串)、strcat(字符串拼接)、strcmp(比较字符串大小)、strstr(查找子字符串)及memcpy(内存拷贝)等基本函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分别实现strlen,strcpy,strcat,strcmp,strstr,memcpy


//1.实现strlen
//2.实现strcpy
//3.实现strcat
//4.实现strcmp
//5.实现strstr
//6.实现memcpy

//实现strlen(求字符串长度)
size_t Strlen(const char* str) //const确定参数的长度
{ //合法性校验
/if (str == NULL) {
return 0;
}
/
assert(str != NULL);//断言,表达式为真,运行;为假,程序终止
int i = 0;
while (str[i] != ‘\0’) {
++i;
}
return i;
}

//实现strcpy(复制字符串)
char* Strcpy(char* dest, const char* src) {
//合法性校验
assert(src != NULL);
assert(dest != NULL);
int i = 0;
for (;src[i]!=’\0’;++i){ //到\0结束
dest[i] = src[i];
}
dest[i] = ‘i\0’; //将\0复制给最后一个地址
return dest;
}

//实现strcat(字符拼接)
char* Strcat(char* dest, const char* src) {
assert(dest != NULL);
assert(src != NULL);
//1,找到dest的结束位置
int i = 0;
for (; dest[i] != ‘\0’; ++i);
//2,吧src拷贝到dest的结束位置
for (int j = 0; src[j] != ‘\0’; ++j, ++i) {
dest[i] = src[j];
}
dest[i] = ‘\0’; //将\0加入dest
return dest;
}

//实现strcmp(比较字符串的大小)
int Strcmp(const char* str1, const char* str2) {
assert(str1 != NULL);
assert(str2 != NULL);//合法性校验
while (*str1 != ‘\0’&&*str2 != ‘\0’) {
if (*str1 < *str2) {
return -1;
}
else if (*str1 > *str2) {
return 1;
}
else {
++str1;//如果相等,字符加一
++str2;
}
}
if (*str1 < *str2) {//重新进行比较
return -1;
}
else if (*str1 > *str2) {
return 1;
}else{
return 0;}
}

//实现strstr(判定是否存在包含关系)
char* strstr(const char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
if (!str1 || !str2)
{
return str1;
}
/* 遍历src字符串 /
while (str1)
{
/
用来遍历子串 /
char
bp = str1;
char
sp = str2;
do
{
if (!*sp) /*到了sub的结束位置,返回src位置 */
return str1;
} while (*bp++ == *sp++);
str1++;
}
return NULL;
}

//实现memcpy(拷贝内存等,不包括\0)
void* Memcpy(void* dest, const void* src, size_t num) {
assert(dest != NULL);
assert(src != NULL);
char* pdest = (char*)dest;
const char* psrc = (const char*)src;
for (size_t i = 0; i < num; ++i) {
*pdest = *psrc;
++pdest;
++psrc;
}
return dest;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值