c库函数 strring.h字符串操作(部分常用实现)

对于C程序员来说,string.h是非常常用的库函数,面试题也经常会碰到,下面就来复习一下


1.size_t strlen( char const * string);

注意: size_t  are defined in stddef.h   is unsigned int  (in x64 unsigned long int )
strlen(x) -strlen(y) >=0 永远会是真值,因为无符号数永远不可能是负的。
实现:
size_t strlen (const char * string )
{
                 size_t length =0;
                 while( *string ++ !='\0')
                {
                                 length++;
                }
                 return length ;
}

2. char * strcpy(char *dst, const char *src);

注意:      1.  如果dst 和src发生重叠 结果是未定义的
              2. 必须保证dst空间足够存放需要复制的字符串,否则多余的字符串会覆盖原先存储于数组后面的内存空间

char * strcpy ( char * dst ,const char * src)
{
                 char *p = dst;
                 if ( dst && src )
                {
                                 while ( (*dst ++ = *src++)!= '\0'  );
                }
                 return p ;
}

3.char * strcat( char *dst ,char const *src);

注意:      1  如果dst 和src发生重叠 结果是未定义的.
              2.考虑dst 的空间,必须大于等于 strlen(dst) +stlen(src)+1
char * strcat ( char * dst ,char const * src)
{
                 char *p = dst;
                 while(*dst !='\0')
                {
                                 dst++;
                }
                 while ((*dst ++  =  *src++)!= '\0' );
                 return p ;
}

4. int strcmp ( const char *str1 , const char *str2 

注意: s1>s2返回>0 s1==s2 return 0 s1<s2 return <0
 int strcmp(const char *str1,const char *str2) 
{ 
                 while( (*str1 == *str2) && * str1 != '\0' ) 
                { 
                                 str1++; 
                                 str2++; 
                } 
             return * str1 - *str2 ;
}  

5.长度受限的字符串函数


char *strncpy(char *dst ,char * src ,size_t len);
char *strncat(char *dst ,char * src ,size_t len);
int     strncpy(char *s1,char * s2,size_t len);

有了前面几个函数的实现,相信有长度的字符串函数也很容易实现的,
通常这些库函数是用汇编语言实现的,目的在于效率,
对于用C语言实现的目的就是对于C语言的练习。

6.字符串查找


char *strchr(const char * str, int ch);
char *strrstr(const char * str, int ch);
strchr 返回ch第一次出现位置的指针,如果找不到返回NULL     
strrchr 返回ch最后一次出现位置的指针, 如果找不到返回NULL 

char *strpbrk(char const *str ,char const *group)
如:ans = strpbkr("hello","aeiou");


7.查找子串


char  * strstr (char const *s1 , char const *s2);

//查找一个字符串前缀
size_t  strspn(char const *str, char const *group);
size_t  strcspn(char const *str, char const *group);


8.字符操作


iscntrl: 控制字符
isspace 空白字符   空格、\f换页 \n换行 \t  \v 制表符 (水平 垂直)
isdigit  0-9
isxdigit 16 进制数字 a-f 0-9
islower 
isupper
isalpha  a-z A-Z
isalnum 0-9 a-z A-Z
ispunct  标点
isgraph  任何图形字符
isprint   任何可打印字符

9.字符转换

int tolower( int ch);
int toupper(int ch);


10内存操作


void  * memcpy(void *dst ,void const *src ,size_t length);
void  * memmove(void *dst ,void const *src ,size_t length);
void  * memcmp(void *a,void const *b,size_t length);

void  * memchr(void *a ,int ch ,size_t length);
void  * memset(void *a ,int ch ,size_t length);











你可能感兴趣的:(面试题,C语言)