Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69806
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-08 19:09
文章分类
文章存档

2015年(115)

我的朋友

分类: C/C++

2015-08-06 16:46:27

原文地址:string库函数的实现 作者:runningdark

练手代码。已测试。
包含 strlen, rev, strcat, strcmp, strstr, itoa

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <assert.h>
  3. #define SWAP(a,b) (a)^=(b);(b)^=(a);(a)^=(b)
  4. int mystrlen(const char* src){
  5.     assert( src!=NULL);
  6.     char* ptr = src;
  7.     while(*ptr){
  8.          ptr++;
  9.     }
  10.     return ptr- src;
  11. }
  12. char * mystrcat(char* src, const char* dest){
  13.     assert( src!=NULL && dest != NULL);
  14.         char* ret = src;
  15.           while(*src) src++;
  16.         while(*src++ = *dest++);
  17.         return ret;
  18. }
  19. char *myrev(char* str){
  20.         assert(str!=NULL);
  21.         char* ret, *start ;
  22.         ret = start = str;
  23.     while(*str) str++;
  24.         str--;
  25.         
  26.         while(start<str){
  27.           SWAP(*start, *str);
  28.           start++,str--;
  29.         }
  30.         return ret;
  31. }
  32. int mystrcmp(const char* src, const char* dest){
  33.     assert( src!=NULL && dest != NULL);
  34.     while(*src && *dest && *src == *dest) src++, dest++;
  35.         return *src - *dest;
  36. }
  37. char *myitoa(int num, char* buf){
  38.         assert(buf!=NULL);
  39.         char * ret = buf;
  40.         int isNegtive = 0;
  41.         if(num<0){
  42.              num*=-1;
  43.              isNegtive = 1;
  44.         }
  45.         do{
  46.            *buf++ = num%10 + '0';
  47.         }while(num/=10);
  48.         // negtive
  49.         if(isNegtive) *buf++ = '-';
  50.         *buf = '\0';
  51.         return myrev(ret);
  52. }
  53. char* mystrstr(const char* src, const char* dest){
  54.       assert( src!=NULL && dest != NULL);
  55.       if(!*dest) return src;
  56.       while(*src){
  57.            int i = 0;
  58.            for(;*(src+i)==*(dest+i);i++){
  59.                 if(!*(dest+i+1))
  60.                       return src;
  61.            }
  62.            src++;
  63.       }
  64.       return NULL;
  65.   
  66. }
  67. int main(){
  68.     char test[10] = "abcd";
  69.     printf("strlen: %d\n", mystrlen(test));
  70.     printf("strcat %s\n", mystrcat(test,"xyz"));
  71.     printf("myrev %s\n", myrev(test));
  72.     printf("mystrcmp %d\n",mystrcmp("test",test));
  73.     printf("mystrcmp %d\n",mystrcmp(test,"zyxdcba"));
  74.     printf("mystrstr %s\n",mystrstr(test, "bc"));
  75.     printf("myitoa %s \n", myitoa(-124, test));
  76. }

阅读(112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~