strcmp ,strcat,strspy 函数的实现

本文提供了C语言中三个常用字符串函数的实现:mystrcpy用于复制字符串,mystrcat用于连接两个字符串,mystrcmp用于比较两个字符串。这些函数是理解C语言字符串操作的基础。

strcmp 函数的实现


#include <stdio.h>



char *mystrcpy(char *q, char *p)
{
char *temp = q;


while(*p != '\0')
{
*q++ = *p++;
}
*q = '\0';


return temp;
}


int main(void)
{
char dest[64], src[64] = {};


scanf("%s", src);


printf("%s\n", mystrcpy(dest, src));


return 0;

}


strcat函数的实现

#include <stdio.h>


char *mystrcat(char *p1, char *p2)
{
char *temp = p1;


while(*p1++ != '\0')
{
}


p1--;
while(*p2 != '\0')
{
*p1++ = *p2++;
}
*p1 = '\0';


return temp;
}


int main(void)
{
char s1[64], s2[64];


scanf("%s%s", s1, s2);


printf("%s\n", mystrcat(s1, s2));


return 0;
}

strcmp 函数的实现



#include <stdio.h>


int mystrcmp(char *p1, char *p2)
{
while(*p1==*p2 && *p1!='\0')
{
p1++;
p2++;
}


if(*p1 == *p2)
{
return 0;
}
else
{
if(*p1 > *p2)
{
return 1;
}
else
{
return -1;
}
}
}


int main(void)
{
char s1[64], s2[64];


scanf("%s%s", s1, s2);


printf("%d\n", mystrcmp(s1, s2));


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、付费专栏及课程。

余额充值