【c基础】字符串、字符和字节

来源:互联网 发布:西交大软件学院 编辑:程序博客网 时间:2024/06/05 06:27

一、字符串

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


intstrcmp( char  const *s1,  char const  *s2)

intstrncmp(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,就在同一字符串中继续向后查找标记。


字符

字符操作分两类:字符分类和字符转换


字符分类函数:接受一个包含字符值的整型参数,返回一个表示真假的整型值。

iscntrlisspace isdigitisxdigit islowerisupper isalphaisalnum ispunctisgraph 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)









原创粉丝点击