C语言模拟实现strcpy、strncpy、strcmp、strcat、strstr

xiaoxiao2021-02-28  47

1,模拟实现strcpy

功能:字符串拷贝函数 代码:

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

测试:

int main() { char str1[20];//必须给足够大的空间保证str2能存储 char* str2 = "HowAreYou"; char* ret = my_strcpy(str1, str2); printf("%s\n", ret); system("pause"); return 0; }

2,模拟实现strncpy

功能:类似于strcpy,可以将字符串中的n个字符拷贝 代码:

char* my_strncpy(char* dest, const char* src, int n) { assert(dest); assert(src); char* ret = dest; while (n) { *dest++ = *src++; n--; } if (*(dest - 1) != '\0'); { *dest = '\0'; } return ret; }

测试:

int main() { char str1[5]; char* str2 = "abcdefg"; char* ret = my_strncpy(str1, str2,4); printf("%s\n", ret); system("pause\n"); return 0; }

3,模拟实现strcmp

功能:字符串比较函数,相等返回0,小于返回小于0的数,大于则返回大于0的数 代码:

int my_strcmp(char* arr, char* str) { assert(arr); assert(str); while (*arr == *str) { if (*arr == '\0' || *str == '\0') { return 0; } arr++; str++; } return *arr - *str; }

测试:

int main() { char *p1 = "ab"; char *p2 = "abcd"; char *p3 = "defab"; printf("%d\n", my_strcmp(p1, p1)); //0 printf("%d\n", my_strcmp(p1, p2)); //-99 printf("%d\n", my_strcmp(p1, p3)); //-3 printf("%d\n", my_strcmp(p3, p1)); //3 system("pause\n"); return 0; }

4,模拟实现strcat

功能:字符串追加函数 代码:

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

测试:

int main() { char str1[20] = "hello "; char* str2 = "world"; char* ret = my_strcat(str1, str2); printf("%s\n", ret); system("pause\n"); return 0; }

5,模拟实现strstr

功能:判断一个字符串是否是另一个字符串的子串,如果是,则返回在这个字符串中首次出现的位置,如果不是,返回NULL 代码:

char* my_strstr(const char* str, const char*substr) { const char* s1 = str; const char* s2 = substr; const char* cur = str; assert(str); assert(substr); if (*substr == '\0') { return str; } while (cur) { s1 = cur; s2 = substr; while (*s1 == *s2) { s1++; s2++; } if (*s2 == '\0') return cur; if (*s1 == '\0') return NULL; cur++; } return NULL; }

测试:

int main() { const char* str = "abcdefg"; const char* substr = "bcd"; char* ret = my_strstr(str, substr); if (ret == NULL) { printf("No\n"); } else { printf("%s\n", ret); } system("pause\n"); return 0; }

转载请注明原文地址: https://www.6miu.com/read-34171.html

最新回复(0)