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 *string -待求字符串 231 * const char *substring -子串 232 * 返回值: 233 * 返回子串的位置 234 ********************************************************************/ 235 int strstr_yl(const char *string,const char substring) 236 { 237 assert(string!=NULL && substring!=NULL); 238 239 size_t len1=strlen(string); 240 size_t len2=strlen(substring); 241 242 int i,j=0; 243 for (i=0;i<len2;i++) 244 { 245 246 if (string[j]!=substring[i]) 247 { 248 j++; 249 i=0; 250 } 251 else 252 { 253 j++; 254 } 255 256 if (j>len1-len2) 257 { 258 return -1; 259 } 260 261 } 262 263 if (i==len2) 264 { 265 return j-len2; 266 } 267 268 }
|