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

一、字符串

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 )









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值