strcpy strlen memcpy strcat strcmp strstr strrev函数的实现代码
2012-07-24 10:53
816 查看
/* //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"); }
相关文章推荐
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- strlen,strcpy,strcat,strcmp四个函数的原型,memcpy,memset的实现
- 模拟实现函数库中的常用函数,1实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove,8实现memset
- strlen strcmp strcat strcpy strncpy strstr strchar函数的实现
- mem系列函数(memset memcpy memmove) 和str系列函数(strlen strcpy strcmp strcat strstr strtok)
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- 模拟实现strlen,strcpy,strcat,strstr,strcmp,memcpy,memmove
- memcmp,memcpy,memmove,memset,strcat,strcmp,strcpy,strlen 8个函数的实现
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- strlen,strcpy,strncpy,strcmp,strcat,strstr的用法,函数原型及函数的实现
- 模拟实现c库函数strcpy,strcat,strstr,strcmp,memcpy,memmove
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr