面试过程中,经常碰到的一类基础编程题是关于C中string.h中若干常用函数的实现,下面做个简单整理:
1. 【mystrlen】 ---- 求字串长度
size_t mystrlen ( const char * str ) {assert ( str );size_t length = 0 ;while (( * str ++ ) != '\0' )length ++ ;return length ;}
2. 【mystrcpy】 ----- 字符串拷贝
char * mystrcpy ( char * des , const char * src ) {assert ( des && src );char * ptr = des ;while (( * des ++=* src ++ ) != '\0' );return ptr ;}
3. 【mystrcat】 ---- 字符串连接
char * strcat ( char * str1 , const char * str2 ) {assert ( str1 && str2 );char * ptr = str1 ;while ( * ptr != '\0' )ptr ++ ;while (( * ptr ++=* str2 ++ ) != '\0' );return str1 ;}
4. 【mystrcmp】---- 字符串比较
int mystrcmp ( const char * s1 , const char * s2 ) {assert ( s1 && s2 );while ( * s1 &&* s2 && ( * s1 ==* s2 ))s1 ++ , s2 ++ ;return * s2 -* s1 ;}
5. 【mystrchr】 ----- 查找字符
char * mystrchr ( const char * str , char c ) {assert ( str );char * ptr = ( char * ) str ;while ( * ptr != '\0' &&* ptr != c )ptr ++ ;return * ptr == c ? ptr : NULL ;}
6. 【mystrstr】 ---- 查找子串
char * mystrstr ( const char * str , const char * substr ) {assert ( str && substr );size_t len1 = 0 , len2 = 0 , pos = 0 ;while ( * ( str + len1 ) != '\0' ) len1 ++ ;while ( * ( substr + len2 ) != '\0' ) len2 ++ ;if ( len2 > len1 ) return NULL ;while ( pos ++< len1 - len2 ) {int ipos = 0 ;while (( ipos ++< len2 ) && ( * ( str + pos + ipos ) ==* ( substr + ipos )));if ( ipos == len2 )return ( char * )( str + pos );}return NULL ;}