strcpy strlen memcpy strcat strcmp strstr strrev函数的实现代码
来源:互联网 发布:python编辑器是什么 编辑:程序博客网 时间:2024/05/16 19:24
/* //strcpy函数的实现,注意命名要与原来的库函数有区别 #include <iostream>#include <cstdio>#include <assert.h>using namespace std;char *mystrcpy(char *strDest, const char *strSrc){ if ((strDest == NULL) || (strSrc == NULL))//保证strDest和strSrc的有效性 return NULL; char *strDestCopy = strDest;//保存目标字符串的首地址,以便最后的返回 //注意:++的优先级要比*的要高 while ((*strDest++ = *strSrc++) != '\0');//将字符从strsrc中复制到strDest中 return strDestCopy; }int main(){ char *strSrc = "Hello World!"; char strDest[20]; mystrcpy(strDest, strSrc); printf("strDest:%s\n", strDest); system("pause");}*//* //strlen函数的实现,有两种方法实现#include <iostream>#include <cstdio>#include <assert.h>using namespace std;//第一种方法就是通过一个变量len的自增,直至遇到字符串的结束字符 int mystrlen1(const char *strSrc){ assert(strSrc != NULL);//保证字符串首地址的有效性 int len = 0;//结果的保存 while (*strSrc++ != '\0'){ len++; } return len; } //第二种方法就是通过对字符串首地址的保存,再用字符串的末地址减去首地址就可以int mystrlen2(char *strSrc){ int len; char *tmpstrSrc = strSrc;//将字符串的首地址先保存下来 while (*strSrc++ != '\0'); //直至遇到字符串的结束符,strSrc已经为字符串的末地址 len = (strSrc - tmpstrSrc - 1);//末地址减去首地址,得出结果 return len; } int main(){ char *strSrc = "Hello World!"; int len1, len2; len1 = mystrlen1(strSrc); len2 = mystrlen2(strSrc); printf("len1 = %d\n", len1); printf("len2 = %d\n", len2); system("pause"); } *//* //memcpy函数的实现 #include <iostream>#include <cstdio>#include <assert.h>using namespace std;void *mymemcpy(void *memTo, const void *memFrom, int size){ assert((memTo != NULL) && (memFrom != NULL));//保证字符串的有效性 char *tmpmemTo = (char *)memTo;//对字符串首地址的保存 char *tmpmemFrom = (char *)memFrom; //按照size的大小进行复制 while (size-- > 0){ *tmpmemTo++ = *tmpmemFrom++; } return memTo; } int main(){ char *strFrom = "Hello World!"; char strTo[20]; mymemcpy(strTo, strFrom, 6); strTo[6] = '\0'; printf("strTo:%s\n", strTo); system("pause"); } *//* //strcat函数的实现#include <iostream>#include <cstdio>#include <assert.h>using namespace std;char *mystrcat(char *strDest, char *strSrc){ char *tmpstrDest; tmpstrDest = strDest;//保存目标字符串的首地址 while (*strDest++ != '\0');// 循环到字符串的末尾 strDest--; while ((*strDest++ = *strSrc++) != '\0');//进行字符串的复制 return tmpstrDest; //字符串首地址的返回 } int main(){ char *strDest = NULL; char *strSrc1 = "Hello "; char *strSrc2 = "World!"; strDest = (char *)malloc(256); *strDest = '\0'; mystrcat(mystrcat(strDest, strSrc1), strSrc2); printf("strDest:%s\n", strDest); free(strDest); strDest = NULL; system("pause"); } *//* //strcmp函数的实现#include <iostream>#include <cstdio>using namespace std;int mystrcmp(const char *strSrc, const char *strDest){ int ans = 0;//结果的保存 //取两个字符串的各个字符进行相减,即是它们的ASCII相减 while (!(ans = *(unsigned char *)strSrc - *(unsigned char *)strDest) && *strDest){ ++strSrc; ++strDest; } if (ans > 0) ans = 1; else if (ans < 0) ans = -1; return ans; } int main(){ char *str = "1234567"; char *str1 = "1234567"; char *str2 = "12345678"; char *str3 = "1234566"; int test1 = mystrcmp(str, str1); int test2 = mystrcmp(str, str2); int test3 = mystrcmp(str, str3); cout << test1 << endl << test2 << endl << test3 << endl; system("pause"); } *//* //strstr函数的实现#include <iostream>#include <cstdio>using namespace std;int mystrstr(const char *strSrc, const char *strSub){ int pos = 0; //对两个字符串的首地址进行保存 const char *bp; const char *sp; if (strSrc == NULL || strSub == NULL)//保证字符串的有效性 return -1; while (strSrc){ bp = strSrc;//得到其字符串的首地址,从首地址开始进行逐一比较字符串是否相等! sp = strSub; do{ if (!*sp)//如果子串到达了字符串的结束符,证明已经找到,返回其位置 return pos; } while (*bp++ == *sp++); pos++; strSrc++;//如果没有找到,将主模式串的位置向前推进一位,继续比较,一直到达字符串的结尾! } return -1; } int main(){ char *strSrc = "123456"; char *strSub = "345"; int pos = mystrstr(strSrc, strSub); cout << pos << endl; system("pause"); } *///strrev函数的实现 #include <iostream>#include <cstdio>using namespace std;//方法1:遍历字符串,将第一个字符和最后一个字符交换,第2个和倒数第2个字符交换,依次循环! char *strrev1(const char* str){ int len = strlen(str); char *tmp = new char[len+1]; strcpy(tmp, str); for (int i = 0; i < len/2; i++){ char c = tmp[i]; tmp[i] = tmp[len-1-i]; tmp[len-1-i] = c; } return tmp; } //方法2:用指针进行直接的操作char *strrev2(const char *str){ int len = strlen(str); char *tmp = new char[len+1]; strcpy(tmp, str); char *ret = tmp;//保存首地址 char *p = tmp + len - 1; //保存尾地址 while (p > tmp){ char t = *tmp; *tmp = *p; *p = t; --p; ++tmp; } return ret; } //方法3:我们借助异或运算(^)完成两个字符的交换char *strrev3(const char *str){ char *tmp = new char[strlen(str) + 1]; strcpy(tmp, str); char *ret = tmp; char *p = tmp + strlen(str)-1; while (p > tmp){ *p ^= *tmp; *tmp ^= *p; *p ^= *tmp; --p; ++tmp; } return ret; } char *strrev4(const char *str){ char *tmp = new char[strlen(str) + 1]; strcpy(tmp, str); char *ret = tmp; char *p = tmp + strlen(str)-1; while (p > tmp){ *p = *p + *tmp; *tmp = *p - *tmp; *p = *p - *tmp; --p; ++tmp; } return ret; } int main(){ char *str = "123456"; cout << str << endl; char *str2 = strrev1(str); cout << str2 << endl; char *str3 = strrev2(str); cout << str3 << endl; char *str4 = strrev3(str); cout << str4 << endl; char *str5 = strrev4(str); cout << str5 << endl; system("pause"); }
- strcpy strlen memcpy strcat strcmp strstr strrev函数的实现代码
- C++常见字符串操作函数的实现(strcpy/strcat/strcmp/strlen/strchr/strstr/strpbrk/strrev等)
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- strcpy, strcmp, strcat, strstr, strlen的实现
- strlen strcmp strcat strcpy strncpy strstr strchar函数的实现
- strlen函数 strcpy函数 strcmp函数 strstr函数 strcat函数 memcpy函数 memmove函数 以及字符串反转函数的实现
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 模拟实现strlen,strcpy,strcat,strcmp,strstr,memcpy,memmove
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 模拟实现strlen/strcpy/strcat/strcmp/strstr/strchr/函数
- 【C语言】、模拟实现strlen,strcmp,strcpy,strcat,strstr函数
- 模拟实现strcpy,strcmp,strstr,strncpy,strncmp,strcat,strlen函数
- 模拟实现strlen,strcpy,strcat,strstr,strcmp函数
- strlen,strcpy,strcat,strcmp函数的实现
- strcat,strcpy,strcmp,strlen,memcpy函数原型
- UnboundLocalError: local variable 'l' referenced before assignment
- QString类
- HibernateTemplate
- opencv turia
- cas 单点登录
- strcpy strlen memcpy strcat strcmp strstr strrev函数的实现代码
- HOOK ObjectType 干涉文件访问
- AIX常用命令2
- 解决了一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- Linux3.5 is coming !
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- oracle理论学习详解及各种简单操作例子(菜鸟必备)
- Linux查看版本信息及CPU内核、型号
- Ubuntu linux下安装sqlite3