必记小程序

 

  1 char* myitoa(int x,char* str){
  2     assert(str!=0);
  3 
  4     int negPos=-1;
  5     if(x<0){
  6         negPos=0;
  7         str[negPos]='-';
  8         x*=-1;
  9     }
 10 
 11     int i,j;
 12     i=j=negPos+1;
 13     do{
 14         str[j++]=x%10+'0';
 15         x/=10;
 16     }while(x!=0);
 17     str[j]='\0';
 18 
 19     j--;
 20     while(i<j){
 21         char t=str[i];
 22         str[i]=str[j];
 23         str[j]=t;
 24         i++;
 25         j--;
 26     }
 27     return str;
 28 }
 29 
 30 bool myatoi(const char *str,int&x){
 31     int neg=1,i=0;
 32     if(str[0]=='-'){
 33         neg=-1;
 34         i=1;
 35     }
 36     else if(str[0]=='+'){
 37         i=1;
 38     }
 39 
 40     const char* p=str+i;
 41     if(*p=='\0')
 42         return false;
 43 
 44     x=0;
 45     while(*p){
 46         if(*p<'0'||*p>'9')
 47             return false;
 48         x=x*10+*p-'0';
 49         p++;
 50     }
 51     x*=neg;
 52     return true;
 53 }
 54 
 55 char* mystrcpy(char* dest,const char* src){
 56     assert((dest!=0)&&(src!=0));
 57     char* cp=dest;
 58     while(*cp++=*src++);
 59     return dest;
 60 }
 61 
 62 void* mymemcpy(void *dest,const void *src,
 63 size_t count){
 64     assert((dest!=0)&&(src!=0));
 65     char* pDest=static_cast<char*>(dest);
 66     const char* pSrc=
 67 static_cast<const char*>(src);
 68     if(pDest>pSrc&&pDest<pSrc+count){
 69         for(int i=count-1;i>=0;--i)
 70             pDest[i]=pSrc[i];
 71     }
 72     else{
 73         for(int i=0;i<count;i++)
 74             pDest[i]=pSrc[i];
 75     }
 76     return dest;
 77 }
 78 
 79 
 80 void* mymemset(void* buffer,int c,int count){
 81     assert(buffer!=0);
 82     char* p=static_cast<char*>(buffer);
 83     while(count>0){
 84         *p++=(char)c;
 85         count--;
 86     }
 87     return buffer;
 88 }
 89 
 90 //把一个字符串循环右移n个。eg:n=2,abcdefghi -> hiabcdefg
 91 void loopmove(char* pStr,int steps){
 92     int len=strlen(pStr);
 93     int n=steps%len;
 94     int r=len-n;
 95     char* tmp=new char[n];
 96     memcpy(tmp,pStr+r,n);
 97     memcpy(pStr+n,pStr,r);
 98     memcpy(pStr,tmp,n);
 99     delete[]tmp;
100 }
101 
102 char* mystrstr(const char* str,const char* strSearch){
103     assert((str!=0)&&(strSearch!=0));
104     int n1=strlen(str);
105     int n2=strlen(strSearch);
106     /*if(n2==0)
107         return 0;*/
108     int i=0,j=0;
109     while(i<n1&&j<n2){
110         if(str[i]==strSearch[j]){
111             i++;j++;
112         }
113         else{
114             i=i-j+1;
115             j=0;
116         }
117     }
118     if(j>=n2)
119         return const_cast<char*>(str+i-j);
120     else
121         return 0;
122 }

int strcmp(const char * p1, const char * p2) {

  while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2){

    p1++, p2++;

  }

  if (*p1 == '\0' && *p2 == '\0') return 0;

  if (*p1 == '\0') return -1;

  if (*p2 == '\0') return 1;

  return (*p1 - *p2);

}

 

 待续。。。

posted @ 2012-08-13 20:07  freewater  阅读(170)  评论(0编辑  收藏  举报