zoukankan      html  css  js  c++  java
  • 重写strstr、strcpy、memcpy、memset、atof算法

      1 #include<stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <ctype.h>
      5 #include <math.h>
      6 
      7 char *Mystrstr(const char *string, const char *strCharSet)
      8 {
      9     if (NULL == string)
     10     {
     11         return (char *)string;
     12     }
     13     if (NULL == strCharSet)
     14     {
     15         return NULL;
     16     }
     17     int nLen1 = strlen(string);
     18     int nLen2 = strlen(strCharSet);
     19 
     20     for (int i = 0; i < nLen2; i++)
     21     {
     22         for (int j = 0; j <nLen1; j++)
     23         {
     24             if (strCharSet[i] == string[j])
     25             {
     26                 int nPos = j;
     27                 while ( (i < nLen2) &&(strCharSet[i] == string[j]))
     28                 {
     29                     i++;
     30                     j++;
     31                 }
     32                 if (i == nLen2)
     33                 {
     34                     return (char *)&string[nPos];
     35                 }
     36                 i = nPos;
     37             }
     38         }
     39     }
     40     return NULL;
     41 }
     42 
     43 char *Mystrcpy( char *strDestination, const char *strSource )
     44 {
     45     if (strDestination == NULL && strDestination == NULL)
     46     {
     47         exit(0);
     48     }
     49     
     50     while (*strSource != '')
     51     {
     52         *strDestination++ = *strSource++;
     53     }
     54     *strDestination = '';
     55     return strDestination;
     56 }
     57 
     58 void *Mymemset( void *dest, int c, size_t count )
     59 {
     60     char *pszDest = (char *)dest;
     61     if (pszDest == NULL)
     62     {
     63         exit(0);
     64     }
     65     if (0 == count)
     66     {
     67         return dest;
     68     }
     69     for (size_t i = 0; i < count; i++)
     70     {
     71         *pszDest++ = c;
     72     }
     73     return dest;
     74 }
     75 
     76 void* MyMemcpy( void *dest, const void *src, int nCount )
     77 {
     78     if (NULL == dest || src == NULL)
     79     {
     80         return NULL;
     81     }
     82     char *pszDest = (char *)dest;
     83     const char *pszSrc = (char *)src;
     84     
     85 
     86     if (pszDest > pszSrc && pszDest < pszSrc + nCount)
     87     {//有重复(pszDest的位置 在pszSrc里面)
     88         for (int i = nCount - 1; i >= 0; i--)
     89         {//从后往前拷贝
     90             pszDest[i] = pszSrc[i];
     91         }
     92     }
     93     else
     94     {
     95         for (int i = 0; i < nCount; i++)
     96         {
     97             pszDest[i] = pszSrc[i];
     98         }
     99     }
    100     return dest;
    101 }
    102 
    103 
    104 
    105 double Myatof( const char *string )
    106 {
    107     bool IsNegative = false;
    108     bool IsInt = true;
    109     double dblResult = 0;
    110     int i = 1;
    111     while (*string != '')
    112     {
    113         switch(*string) {
    114             case ' ':
    115                 string++;
    116                 break;
    117             case '-':
    118                 IsNegative = true;
    119                 string++;
    120                 break;
    121             case '+':
    122                 IsNegative = false;
    123                 string++;
    124                 break;
    125             case '.':
    126                 IsInt = false;
    127                 string++;
    128                 break;
    129             default:
    130                 if (IsInt)
    131                 {
    132                     dblResult = dblResult*10 + (*string - '0');
    133                     string++;
    134                 }
    135                 else
    136                 {
    137                     dblResult += (*string - '0') / pow(10, i++); 
    138                     string++;
    139                 }
    140                 break;
    141          }//end_of_switch
    142         
    143     }//end_of_while
    144     
    145     return IsNegative? -dblResult : dblResult;
    146 }
    147 
    148 
    149 int main()
    150 {
    151     char szBuf[21];
    152     memset(szBuf, 0, sizeof(szBuf));
    153     for (int i = 0; i < 20; i++)
    154     {
    155         szBuf[i] = 'a' + i;
    156     }
    157     MyMemcpy(&szBuf[10], &szBuf[2], 4);
    158     printf("%s
    ", szBuf);
    159     return 0;
    160 }
  • 相关阅读:
    JAVA Oauth 认证服务器的搭建
    ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
    Java OAuth开发包资料
    hOAuth2.0认证和授权原理
    Spring+Quartz实现定时任务的配置方法
    cron表达式详解(Spring定时任务配置时间间隔)
    spring定时任务的配置使用
    [spring-framework]Spring定时器的配置和使用
    net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
    大数据和拉普拉斯妖
  • 原文地址:https://www.cnblogs.com/nothx/p/8512341.html
Copyright © 2011-2022 走看看