char *strpbrk(const char * s1, const char * s2);如果s1字符中包含s2字符串中的任意字符 , 该函数返回指向s1字符串首位置的指针;如果在s1字符串中未找到任何s2字符串中的字符 , 则返回空字符 。
char *strrchr(const char * s, int c);该函数返回s字符串中c字符的最后一次出现的位置(末尾的空字符也是字符串的一部分 , 所以在查找范围内) 。如果未找到c字符 , 则返回空指针 。
char *strstr(const char * s1, const char * s2);该函数返回指向s1字符串中s2字符串出现的首位置 。如果在s1中没有找到s2 , 则返回空指针 。
size_t strlen(const char * s);该函数返回s字符串中的字符数 , 不包括末尾的空字符 。请注意 , 那些使用const关键字的函数原型表明 , 函数不会更改字符串 。例如 , 下面的函数原型:
char *strcpy(char * restrict s1, const char * restrict s2);表明不能更改s2指向的字符串 , 至少不能在strcpy()函数中更改 。但是可以更改s1指向的字符串 。这样做很合理 , 因为s1是目标字符串 , 要改变 , 而s2是源字符串 , 不能更改 。
关键字restrict 限制了函数参数的用法 。例如 , 不能把字符串拷贝给本身 。
size_t类型是sizeof运算符返回的类型 。C规定sizeof运算符返回一个整数类型 , 但是并未指定是哪种整数类型 , 所以size_t在一个系统中可以是unsignedint , 而在另一个系统中可以是unsigned long 。string.h头文件针对特定系统定义了size_t , 或者参考其他有size_t定义的头文件 。
我们来看一下其中一个函数的简单用法 。前面学过的fgets()读入一行输入时 , 在目标字符串的末尾添加换行符 。我们自定义的s_gets()函数通过while循环检测换行符 。其实 , 这里可以用strchr()代替s_gets() 。首先 , 使用strchr()查找换行符(如果有的话) 。如果该函数发现了换行符 , 将返回该换行符的地址 , 然后便可用空字符替换该位置上的换行符:
char line[80];char * find;fgets(line, 80, stdin);find = strchr(line, 'n');// look for newlineif (find)// if the address is not NULL,*find = '0';// place a null character there如果strchr()未找到换行符 , fgets()在达到行末尾之前就达到了它能读取的最大字符数 。可以像在s_gets()中那样 , 给if添加一个else来处理这种情况 。
接下来 , 我们看一个处理字符串的完整程序 。
推荐阅读
- C语言的自定义输入和输出的三种方法
- 旧硬盘应该如何处理,阿卡西斯的这款雷电3硬盘盒给出了答案
- 编写C程序控制LED
- 还不知道MySQL怎么给字符串加索引?
- C语言的指针与多维数组
- 架构大更新的英特尔Rocket Lake处理器可将频率提升至5.0GHz
- 被蛇咬伤的处理方法 被蛇咬伤应该怎么处理?
- 使用pandas处理时间变量
- C语言的数组的构建与打印
- 驾考5次不过咋处理?
