一,str类
1)strlen
用途:求字符长度,返回值为size_t,无符号整型
用法:可以用一个整形接受返回值,或者直接使用。例如:int ret = strlen(s);
原理:使用时是以' \0‘作为结束计数的,如果字符数组没有' \0 ',可能会非法访问,长度计算也不准确。
自编源码:
int my_strlen(const char * str) { int count = 0; while(*str) { count++; str++; } return count; }
2)strcpy
用途:用来将一串字符中的内容复制到另一串字符
用法:返回值是被复制目的地原来的首元素地址,有两个参数,第一个是目的地字符串地址,第二个是源头字符串地址。例如:strcpy(s1,s2);
原理:仍然是以' \0 '为复制结束标准,并且注意,尽量不要以自身范围的地址同时作为源头,目的地。
自编源码:
char *my_strcpy(char *dest, const char*src) { char *ret = dest; assert(dest != NULL); assert(src != NULL); while((*dest++ = *src++)) { ; } return ret; }
3)strcmp
用途:用来比较字符串大小
用法:两个参数,当第一个参数大于第一个参数,返回大于0的值,相当则返回0,小于返回小于0的值。
原理:从给定的地址,开始比较,找到第一个不同的字符比较,直到' \0 ’;
自编源码:
int my_strcmp (const char * src, const char * dst) { int ret = 0 ; assert(src != NULL); assert(dest != NULL); while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) ++src, ++dst; if ( ret < 0 ) ret = -1 ; else if ( ret > 0 ) ret = 1 ; return( ret ); }
4)strcat
用途:连接字符串
用法:两个参数,第一个为连接目的地地址,连接源头字符串,返回被连接目的地原来的首元素地址
原理:从目的地‘ \0 ’,开始添加,最后将' \0 '加入末尾。
自编源码:
char *my_strcat(char *dest, const char*src) { char *ret = dest; assert(dest != NULL); assert(src != NULL); while(*dest) { dest++; } while((*dest++ = *src++)) { ; } return ret; }
5)strstr
用途:寻找子字符串
用法:两个参数,第一个被寻找的母串,第二个是子串,如果寻找到返回寻找到的母串中子串的地址,没找到则返回NULL。
自编源码:
char * strstr (const char * str1, const char * str2) { char *cp = (char *) str1; char *s1, *s2; if ( !*str2 ) return((char *)str1); while (*cp) { s1 = cp; s2 = (char *) str2; while ( *s1 && *s2 && !(*s1-*s2) ) s1++, s2++; if (!*s2) return(cp); cp++; } return(NULL); }