一、字符串
C语言并没有现实的字符串数据类型,字符串以字符串常量的形式出现或者存储于字符数组中。
字符串包含的字符内部不能出现NUL字节('\0')。
字符串函数:#include <string.h>
size_t strlen( char * const *string ) //字符串长度函数
// size_t 是一个无符号整数类型,在头文件 stddef.h中定义 (注意两个此类型数据的差也是size_t类型,其用作条件表达式的时候要小心)
char *strcpy( char *dst, char const *src )
char *strncpy( char *dst, char const *src, size_t len )
//src的前len个字符赋值给dst所指向的字符数组,若长度不够补NUL,超出并不做检查(末尾不自动加NUL),所以len <= strlen (dst) - 1时有效
char *strcat( char *dst, char const *src )
char *strncat( char *dst, char const *src, size_t len )
//末尾自动加NUL
int strcmp( char const *s1, char const *s2 )
int strncmp( char const *s1, char const *s2, size_t len)
字符串查找相关函数:
在一个字符中查找一个特定字符使用strchr 和 strrchr 函数
char* strchr( char const *str, int ch )
char* strrchr( char const *str, int ch )
// 前者查找ch首次出现的位置,并返回指向该位置的指针;后者返回指向最后一次出现ch的位置的指针。
查找任何几个字符的函数
char *strpbrk( char const *str, char const *group );
// 返回一个指向str中第一个匹配group中任何一个字符的位置。
查找一个子串
char *strstr( char const *s1, char const *s2 )
// 在s1中查找整个s2第一次出现的起始位置,并返回指向该位置的指针。
注:库中无 strrpbrk、strrstr 函数,根据 strpbrk、strstr 容易自己实现。
查找一个字符串前缀的函数
size_t strspn( char const *str, char const *group )
size_t strcspn( char const *str, char const *group )
// strspn返回str起始部分匹配group中任意字符的字符数;strcspn返回str起始部分不匹配group中任意字符的字符数
查找标记
char *strtok( char *str, char const *sep )
// sep定义用作分隔符的字符集合,strtok找到str的下一个标记,并将其用NUL结尾,然后返回一个指向这个标记的指针
注: 若strtok的第一个参数为NULL,就在同一字符串中继续向后查找标记。
字符
字符操作分两类:字符分类和字符转换
字符分类函数:接受一个包含字符值的整型参数,返回一个表示真假的整型值。
iscntrl isspace isdigit isxdigit islower isupper isalpha isalnum ispunct isgraph isprint
空白字符:' ' '\f'(换页) '\n'(换行) '\r'(回车) '\t'(水平制表符) '\v' (垂直制表符)
字符转换函数:转换大小写
int tolower( int ch )
int toupper( int ch )
内存操作
当数据内部包含NUL时,不能用字符串函数处理时,我们可以用下列函数处理任意字节的任意序列字符。
void *memcpy( void *dst, void const *src, size_t length )
void *memmove( void *dst, void const *src, size_t length )
void *memcmp( void const *a, void const *b, size_t length )
void *memchr( void const *a, int ch, size_t length )
void *memset( void *a, int ch, size_t length )