自实现strlen strcat 以及strcmp函数
时间: 2024-09-13 16:06:48 浏览: 39
浅谈C语言中strcpy,strcmp,strlen,strcat函数原型
5星 · 资源好评率100%
在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标准库提供的版本已经经过优化,性能通常优于简单的迭代实现。
阅读全文