c库函数 strring.h字符串操作(部分常用实现)
2014-06-27 20:35
309 查看
对于C程序员来说,string.h是非常常用的库函数,面试题也经常会碰到,下面就来复习一下
strlen(x) -strlen(y) >=0 永远会是真值,因为无符号数永远不可能是负的。
实现:
2. 必须保证dst空间足够存放需要复制的字符串,否则多余的字符串会覆盖原先存储于数组后面的内存空间
1 如果dst 和src发生重叠 结果是未定义的.
2.考虑dst 的空间,必须大于等于 strlen(dst) +stlen(src)+1
char *strncat(char *dst ,char * src ,size_t len);
int strncpy(char *s1,char * s2,size_t len);
有了前面几个函数的实现,相信有长度的字符串函数也很容易实现的,
通常这些库函数是用汇编语言实现的,目的在于效率,
对于用C语言实现的目的就是对于C语言的练习。
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");
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);
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 任何可打印字符
int toupper(int ch);
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);
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 <0int 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);
相关文章推荐
- C语言字符串操作函数及常用的实现
- C语言中常用的字符串操作(子串分割、替换、去前后空格、递归实现字符串反转)
- 一些常用字符串操作函数的内部实现
- 字符串部分操作的函数实现
- 字符串常用操作实现
- C++ string类字符串的常用操作及实现
- 字符串常用操作的实现
- 一些常用字符串操作函数的内部实现
- 一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串汉字操作的常用用法
- C#中一些字符串操作的常用用法(转载)
- delphi中实现用字符串表示并操作控件的方法。
- C#中一些字符串操作的常用用法
- [收藏]C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法