模拟实现strlen、strcpy、strcmp、strncmp等字符串函数
来源:互联网 发布:万达怎么了 知乎 编辑:程序博客网 时间:2024/05/22 13:13
1.模拟实现strlen
//三种方法实现#include <stdio.h>#include <windows.h>#include <assert.h>//递归int my_strlen1(const char *str){ assert(str); if (*str == '\0') { return 0; } return 1 + my_strlen1(str + 1);}//非递归int my_strlen2(const char *str){ assert(str); int count = 0; char *p = str; while (*p) { if (*p == '\0') { return 0; } else { p++; count++; } } return count;}int my_strlen3(const char *str){ char *p = str; while (*p != '\0') { p++; } return p - str; //指针-指针表示指针间跨越的个数}int main(){ char str[] = "abcdef"; printf("len1 = %d\n", my_strlen1(str)); printf("len2 = %d\n", my_strlen2(str)); printf("len3 = %d\n", my_strlen3(str)); system("pause"); return 0;}
结果如下:
2.模拟实现strcpy、strcat
#include <stdio.h>#include <windows.h>#include <assert.h>char* my_strcat(char* dest, const char* src){ char *ret = dest; assert(dest); assert(src); while (*dest) { dest++; //判断目标字符串是否到'\0' } while (*dest++ = *src++) //将源字符串拷贝给目标字符串 { ; } return ret;}char* my_strcpy(char* dest, const char* src){ char *ret = dest; assert(dest); assert(src); while (*dest++ = *src++) { ; } return ret;}int main(){ char arr[20] = { 0 }; char *p = arr; my_strcpy(p, "Hello"); printf("%s\n", p); my_strcat(p, " world!"); printf("%s\n", p); system("pause"); return 0;}
结果如下:
3.模拟实现strcmp
#include <stdio.h>#include <windows.h>#include <assert.h>int my_strcmp(const char *str1, const char *str2){ assert(str1); assert(str2); while (*str1 != '\0' && *str2 != '\0') { if (*str1 == *str2) { str1++, str2++; } else if (*str1 > *str2) { return 1; } else { return -1; } } if (*str1 != '\0') //如果str1长说明str1比str2大 { return 1; } else if (*str2 != '\0') //如果str2长说明str2比str1大 { return -1; } else { return 0; }}int main(){ char str1[] = "abcdeg"; char str2[] = "abcdef"; int ret = my_strcmp(str1, str2); if (ret > 0) { printf("%s is greater than %s\n", str1, str2); } else if (ret == 0) { printf("%s is the same as %s\n", str1, str2); } else { printf("%s is less than %s\n", str1, str2); } system("pause"); return 0;}
结果如下:
4.模拟实现strncpy、strncat
#include <stdio.h>#include <windows.h>#include <assert.h>char* my_strncat(char* dest, const char* src,int num){ char *ret = dest; assert(dest); assert(src); while (*dest) { dest++; } while (num && (*dest++ = *src++)) //拷贝num长的字符串到目标字符串中 { num--; } *dest++ = '\0'; //将最后的'\0'拷入字符串中 return ret;}char* my_strncpy(char* dest, const char* src,int num){ char *ret = dest; assert(dest); assert(src); while (num && (*dest++ = *src++)) //拷贝num长的字符串到目标字符串中 { num--; } if (num > 0) { while (--num) { *dest++ = '\0'; //若num比源字符串长,那么多出的要拷贝字符用'\0'代替 } } return ret;}int main(){ char arr[20] = { 0 }; char *p = arr; my_strncpy(p, "Hellol",5); printf("%s\n", p); my_strncat(p, " world!!",7); printf("%s\n", p); system("pause"); return 0;}
结果如下:
5.模拟实现strncmp
#include <stdio.h>#include <windows.h>#include <assert.h>int my_srtncmp(const char *str1, const char *str2, size_t num){ assert(str1); assert(str2); while (num && (*str1 == *str2)) //比较str1和str2中前num个字符的大小 { str1++; str2++; num--; } if (num > 0) { return *str1 - *str2; //将所有字符比较完后证明两字符串相等 } else { return *(str1 - 1) - *(str2 - 1); //当遇到不相等时,指向的是不相等的字符 }}int main(){ char str[][5] = { "rode", "ride", "root" }; int i = 0; for (; i < 3; i++) { if (my_srtncmp(str[i], "rore", 2) == 0) { printf("result [%d] :%s\n", i, str[i]); } } system("pause"); return 0;}
结果如下:
6.模拟实现strchr(查找字符在字符串中第一次出现的位置)
#include <stdio.h> #include <windows.h>#include <assert.h>char * my_strchr(const char * str, int ch){ assert(str); while (*str && (*str != (char)ch)) //判断对应字符是否是所找字符 { str++; } if (*str == (char)ch) { return (char *)str; //若找到了则返回它的地址 } return NULL;}int main(){ char str[] = "This is a sample string"; char *p = my_strchr(str, 's'); if (p != NULL) { printf("find the char at : %d\n", p - str + 1); //找到目标字符出现的位置 } else { printf("could not find the char\n"); } system("pause"); return 0;}
结果如下:
7.模拟实现strstr(查找子串)
#include <stdio.h>#include <windows.h>#include <assert.h>char *my_strstr(const char *dest, const char *src) { assert(dest); assert(src); char *start = (char *)dest; char *substart = (char *)src; char *ret = (char *)dest; //保存dest首地址 while (*ret) { start = ret; while (*start && *substart && (*start == *substart)) { start++; substart++; } if (*substart == '\0') { return ret; } substart = (char *)src; ret++; //得到原起始位置的下一个位置 } return NULL;}int main(){ char str[20] = "abcdefghijk"; char *p = str; printf("%s\n",my_strstr(p, "defg")); system("pause"); return 0;}
结果如下:
阅读全文
0 0
- 模拟实现strlen、strcpy、strcmp、strncmp等字符串函数
- 模拟实现strcpy,strcmp,strstr,strncpy,strncmp,strcat,strlen函数
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- strlen(),strcpy(),strncpy(),strcat(),strncat(),strcmp(),strncmp()等函数的实现
- Strcat /Strcpy /Strcmp / Strncmp/ Strlen 函数原型
- 模拟实现strlen、strcpy、strcat、strcmp函数
- 字符串函数模拟实现之strcpy、strncpy、strcmp、strncmp、strcat、strncat
- 模拟实现strcmp strncmp函数
- 字符串训练(一)模拟实现strlen,strcmp,strcpy,strcat函数
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
- C语言字符串函数的模拟实现(strlen、strcpy、strcat、strstr 、strcmp)
- C++常见字符串操作函数的实现(strcpy/strcat/strcmp/strlen/strchr/strstr/strpbrk/strrev等)
- C语言:模拟实现strlen、strcpy、strcmp、strReverse、strcat函数
- 模拟实现strlen/strcpy/strcat/strcmp/strstr/strchr/函数
- 【C语言】、模拟实现strlen,strcmp,strcpy,strcat,strstr函数
- 模拟实现strlen,strcpy,strcat,strstr,strcmp函数
- strlen, strcpy, strcat, strcmp, memset... (字符串操作函数的实现)
- StatementHandler
- 1540 第k大数
- Action类的三种编写方式(七)
- Leetcode:Word Ladder II
- 课堂总结
- 模拟实现strlen、strcpy、strcmp、strncmp等字符串函数
- msp430g2553的IIC通信
- Mapper接口
- java 动态绑定
- poj 3469 Dual Core CPU
- 程序员进阶清单 | 每天用干货喂饱你
- ParameterHandler
- 吴家坟女子专修学院郭杜校区计算机分院的学年总结
- Spring学习笔记-Core模块