第九章——字符串、字符和字节

1.字符串是一种重要的数据类型,是一串零个或多个字符,并且一个位模全为0的NUL字节结尾,但C语言中并没有显式的字符串数据类型,因为字符串是以字符串常量的形式出现或存储于字符数组中或者动态分配的内存中。

2.strlen是接受一个字符串指针作为参数,返回该字符串的长度,类型为size_t,在头文件stddef.h中定义,是无符号整型,根据不同类型数据的混合运算原则及类型提升原则,无符号整型与有符号整型进行计算是,将提升为无符号整型进行计算,如果对用strlen函数计算的字符串长度进行比较,strlen(x) - strlen(y)表达式将会是一个无符号整数,即>=0。

3.尽量使用标准库的函数,因为标准库函数可能使用汇编语言写成,使用了特殊的机器指令,效率更高。

4.不受限制的字符串的函数:char *strcpy(char *dst,char const *src);函数将src复制到dst,如果两者存在内存重叠,结果未定义;且dst必须是个空间足够的字符数组或一个指向动态分配内存的数组的指针;char *strcat(char *dst,char const *src);函数将src连接到dst后面,程序员必须保障dst和src内存不出现重叠或者dst有足够的空间。两个函数都返回dst的拷贝。

5.strcmp对两个数组进行比较,int strcmp(char const *s1,char const *s2);如果s1小于s2,返回一个小于0的值,大于则返回大于0的值,如果两个字符串相等,则返回0。

6.长度受限的字符串函数:char *strncpy(char *dst,char const *src,size_t len);char *strncat(char *dst,char const *src,size_t len);int strncmp(char const *s1,char const *s2,size_t len);与长度不受限制的函数相比,他们只操作len长度,如果strlen(src)的长度小于len,dst数组就用额外的NUL字节填充到len长度;如果strlen(src)小于len,则只有len长度的字符被复制到dst中,且不会以NUL字节结尾,调用的结果可能不是一个字符串;strncat最多复制len个字符到dst,不管目标数组出去原先存在的字符串之后留下的空间够不够,它总会在结果字符串后添加一个NUL字节

7.字符串查找:查找一个字符:char *strchr(char const *str,int ch);在字符串str中寻找字符ch,返回该字符第一次出现的位置指针。char *strrchr(char const *str,int ch);返回最后一次出现的位置指针;查找任何几个字符:char *strpbrk(char const *str,char const *group);查找一组字符中任何一个字符第一次出现的位置;查找一个字符串:char *strstr(char const *s1,char const *s2);函数在s1中查找字符串s2,返回第一次出现的位置;标准库并不存在strrstr,strrpbrk,可以自己实现

8.高级字符串查找:size_t strspn(char const *str,char const *group);group字符串指定一个或多个字符,函数返回str起始部分匹配group中任意字符的字符数。size_t strcspn(char const *str,char const *group);strcspn与strspn正好相反,它对str字符串中起始部分不与group中任意字符匹配的字符进行计数。char *strtok(char const *str,char const *sep);sep参数是个字符串,定义了用作分隔的字符集合,第一个参数指定一个字符串,它包含零个或多个由sep字符串中一个或多个分隔符分隔的标记。strtok找到str的下一个标记,并将其用NUL结尾,然后返回一个指向这个标记的指针。如果strtok函数的第一个参数不是NULL,函数找到字符串的第一个标记。strtok同时保存它在字符串中的位置,如果strtok的一个参数是NULL,函数就在同一个字符串中从这个被保存的位置开始像前面一样超找下一个标记。如果字符串内不存在更多的标记,strtok函数就返回一个NULL指针。在典型情况下,第一次调用strtok时,向它传递一个指向字符串的指针。然后,这个函数被重复调用(第一个参数是NULL),知道它返回NULL为止

9.strtok函数执行任务时,它将会修改它所处理的字符串。保存它所处理的函数的局部状态信息,不能同时解析两个字符串。

10.char *strerror(int error_number);strerror函数把一个错误代码作为参数并返回一个指向用于描述错误的字符串的指针。

11.字符操作:iscntrl isspace isdigit isxdigit islower isupper isalpha isalnum ispunct isgrph isprint   int tolower(int ch);

int toupper(int ch);注意不同的字符集,ASCII和EBCDIC

12.内存操作:void *memcpy(void *dst,void const *src,size_t length);将src的起始位置起length个字节的数据复制到dst的内存起始位置,如果src和dst以任何形式出现了重叠,结果未定义。void *memmove(void *dst,void const *src,size_t length);用于处理源和目标参数出现重叠的情况。void *mencmp(void const *a,void const *b,size_t length);void *menchr(void const *a,int ch,size_t length);void *memset(void *a,int ch,size_t length);memset函数把a从开始的length个字节都设置为ch。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值