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 != '\0')
51 {
52 *strDestination++ = *strSource++;
53 }
54 *strDestination = '\0';
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 != '\0')
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\n", szBuf);
159 return 0;
160 }