用C语言编程不用系统函数,分别实现strlen、strcmp、strbrk、strcat、startwith等函数。定义自己的头文件mystring.h,并与系统提供的函数进行对比测试。
时间: 2024-12-15 11:27:49 浏览: 13
C语言中strcpy_strcmp_strlen_strcat函数原型
在C语言编程中,如果不使用系统库函数,我们可以手动编写一些基本字符串处理函数。以下是使用自定义函数实现几个常见字符串操作的例子:
1. strlen() 函数计算字符串长度:
```c
#include <stdio.h>
#include "mystring.h" // 自定义头文件
size_t my_strlen(const char* str) {
size_t len = 0;
while (*str != '\0') {
++len;
str++;
}
return len;
}
// 测试部分
int main() {
const char* test_str = "Hello, C!";
printf("System strlen: %zu, My strlen: %zu\n", strlen(test_str), my_strlen(test_str));
return 0;
}
```
2. strcmp() 函数比较两个字符串:
```c
int my_strcmp(const char* str1, const char* str2) {
while (*str1 == *str2 && *str1 != '\0') {
str1++, str2++;
}
if (*str1 == '\0') return 0; // 如果其中一个结束,返回0表示相等
else return *str1 - *str2; // 不同则返回ASCII码差
}
// 测试
int main() {
printf("System strcmp: %d, My strcmp: %d\n", strcmp("test", "testing"), my_strcmp("test", "testing"));
return 0;
}
```
3. strbrk() 函数在一个字符串中查找字符的位置,这里简化版实现:
```c
char* my_strbrk(const char*haystack, const char*needle) {
while (*haystack) {
if (strstr(haystack, needle)) {
return (char*)haystack;
}
haystack++;
}
return NULL;
}
// 测试
char* result = my_strbrk("hello world", "wo");
printf("System strbrk: %p, My strbrk: %p\n", strstr("hello world", "wo"), result);
```
4. strcat() 连接两个字符串:
```c
void my_strcat(char* dest, const char* src) {
while (*dest) dest++; // 移动到dest的末尾
while (*src) { // 将src复制到dest
*dest++ = *src++;
}
*dest = '\0'; // 添加终止符
}
// 测试
char buffer[50] = "Hello";
my_strcat(buffer, ", World!");
printf("My strcat: '%s'\n", buffer);
```
5. startswith检查前缀(简化版本):
```c
int my_startswith(const char* str, const char* prefix) {
return !prefix || !strncmp(str, prefix, strlen(prefix));
}
// 测试
int result = my_startswith("Hello, World!", "Hello");
printf("System startsWith: %d, My startsWith: %d\n", strncmp("Hello, World!", "Hello", 5), result);
```
请注意,以上函数只是基础版本,对于更复杂的功能,如宽字符支持、内存管理等,系统库函数通常有更完善的实现。同时,在实际项目中,直接重写这些核心函数并避免系统库是不太推荐的,除非出于学习目的或特定需求。
阅读全文