一些字符串的实现函数,没有经过测试,可能有些函数还存在一些错误,有时间再改。
1 /*****************************************************
2 * 函数说明:
3 * 进行字符串拷贝
4 * 函数参数:
5 * const char *src -源字符串
6 * char *dest -目标字符串
7 * 返回值:
8 * 返回目标字符串的地址
9 *****************************************************/
10 char *strcpy_yl(const char *src,char *dest)
11 {
12 assert(src!=NULL && dest!=NULL);
13 int len=strlen(src);
14 char *address=dest;
15 if (dest<(src+len))
16 {
17 char *psrc=src+len-1;
18 char *pdest=dest+len-1;
19 while(len--)
20 {
21 *pdest-- = *psrc--;
22 }
23 *(dest+len)='\0';
24 return address;
25 }
26 else
27 {
28 while(len--)
29 {
30 *dest++ = *src++;
31 }
32 *dest='\0';
33 return address;
34 }
35 }
36
37 /*******************************************************
38 * 函数说明:
39 * 寻找字符串中目标字符第一次出现的位置
40 * 函数参数:
41 * const char *str -字符串
42 * char c -目标字符
43 * 返回值:
44 * 如果存在,返回目标字符的位置;不存在则返回-1
45 *********************************************************/
46 int strchr_yl(const char *str,char c)
47 {
48 assert(str!=NULL);
49 size_t len=strlen(str);
50 int i;
51 for (i=0;i<len;i++)
52 {
53 if (str[i]==c)
54 {
55 return i;
56 }
57 }
58 return -1;
59 }
60
61 /*************************************************************
62 * 函数说明:
63 * 对两个字符串进行比较
64 * 函数参数:
65 * const char *str1 -待比较的字符串1
66 * const char *str2 -待比较的字符串2
67 * 返回值:
68 * 如果字符串1大于字符串2,则返回1;如果字符串1等于字符串2,则返回0;否则返回-1
69 ***************************************************************/
70 int strcmp_yl(const char *str1,const char *str2)
71 {
72 assert(str1!=NULL && str2!=NULL);
73 while(*str1 && *str2 && *str1==*str2)
74 {
75 str1++;
76 str2++;
77 }
78 return (*str1-*str2>0)? 1: (*str1-*str2==0)? 0: -1;
79 }
80
81
82 /*************************************************************
83 * 函数说明:
84 * 字符串连接
85 * 函数参数:
86 * const char *src -源字符串
87 * char *dest -目标字符串
88 * 返回值:
89 * 返回字符串连接后的字符串的指针
90 ***************************************************************/
91 char *strcat_yl(const char *src,char *dest)
92 {
93 assert(src!=NULL && dest!=NULL);
94 char *pdest=dest;
95 while(dest!='\0')
96 {
97 dest++;
98 }
99 while((*dest++=*src++)!='\0');
100 return pdest;
101 }
102
103
104 /****************************************************************
105 * 函数说明:
106 * 求字符串的长度
107 * 函数参数:
108 * const char *str -待求的字符串
109 * 返回值:
110 * 返回字符串的长度
111 ****************************************************************/
112 size_t strlen_yl(const char *str)
113 {
114 assert(str!=NULL);
115
116 size_t len=0;
117 while(*str!='\0')
118 {
119 len++;
120 str++;
121 }
122 return len;
123 }
124
125 /*************************************************************
126 * 函数说明:
127 * 将src所指向的count个字节复制到dest指向的内存块
128 * 函数参数:
129 * void *dest -目标指针
130 * const void *src -源指针
131 * size_t count -要复制的字节数
132 * 返回值:
133 * 返回目标地址
134 **************************************************************/
135 void *memcpy_yl(void *dest,const void *src,size_t count)
136 {
137 assert(dest!=NULL && src!=NULL);
138
139 void *pdest=dest;
140 while(count--)
141 {
142 *(char *)dest=*(char *)src;
143 src=(char *)src+1;
144 dest=(char *)dest+1;
145 }
146
147 return pdest;
148
149 }
150
151
152 /************************************************************
153 * 函数说明:
154 * 将字符串转换为整型
155 * 函数参数:
156 * string str -待转换的字符串
157 * 返回值:
158 * 返回转换后的整型
159 *************************************************************/
160 int str2int_yl(string str)
161 {
162 assert(str.length()>0);
163 int pos=0;
164 int sign=1;
165 if (str[pos]=='+')
166 {
167 pos++;
168 }
169 else if (str[pos]=='-')
170 {
171 sign=-1;
172 pos++;
173 }
174
175 int num=0;
176 while(pos<str.length())
177 {
178 assert(str[pos]>='0' && str[pos]<='9');
179 num=10*num+(str[pos]-'0');
180 assert(num>=0);
181 pos++;
182 }
183
184 num=num*sign;
185 return num;
186 }
187
188
189 /*******************************************************
190 * 函数说明:
191 * 找字符串中第一个只出现一次的字符串
192 * 函数参数:
193 * const char *str -待求的字符串
194 * 返回值:
195 * 返回找到的字符串,如果不存在则返回字符'\0'
196 *******************************************************/
197 char FindNotRepeatChar(const char *str)
198 {
199 if (str==NULL)
200 {
201 return '\0';
202 }
203 const int SIZE=256;
204 int table[SIZE]={0};
205
206 char pstr=str;
207 while(*pstr!='\0')
208 {
209 table[*pstr]++;
210 pstr++;
211 }
212
213 while(*str!='\0')
214 {
215 if (table[*str]==1)
216 {
217 return *str;
218 }
219 str++;
220 }
221
222 return '\0';
223 }
224
225
226 /******************************************************************
227 * 函数说明:
228 * 字符串中寻找子串
229 * 函数参数:
230 * const char *pSrc -待求字符串
231 * const char *pSubStr -子串
232 * 返回值:
233 * 返回子串的位置
234 ********************************************************************/
- int strstr_yl(const char *pSrc, const char *pSubStr)
- {
- assert((pSrc != NULL) && (pSubStr != NULL));
- int len1 = strlen(pSrc);
- int len2 = strlen(pSubStr);
- int i = 0, j = 0;
- for (j = 0; j < len2; ++j)
- {
- if (pSrc[i] != pSubStr[j])
- {
- i++;
- j = 0;
- }
- else
- {
- i++;
- }
- if (j == (len2 - 1))
- {
- return i - len2;
- }
- if (i > len1 - len2)
- {
- return -1;
- }
- }
- return -1;
- }