您的位置:首页 > 其它

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

2014-06-27 20:35 309 查看
对于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);

[align=left]strchr 返回ch第一次出现位置的指针,如果找不到返回NULL [/align]

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: