C语言:字符串函数(2)
C语言 函数 字符串
2023-09-11 14:18:28 时间
strcmp:(字符串比较)
#include <string.h>
int strcmp(const char* str1, const char* str2);
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字0
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
那么如何判断两个字符串? 答:比较的是两个字符串的首字母谁更大,如果一样则比较下一个
模拟实现自己的strcmp函数:
int my_strcmp(const char*str1,const char*str2)
{
assert(str1&&str2);//str1和str2都不能为空指针
while(*str1==*str2)
{
if(*str1=='\0')
{
return 0;//两个字符串都比到\0了,相等
}
str1++;
str2++;
}
if(*str1>*str2)
return 1;//大于
else
return -1;//小于
}
char*p1="abcde";
char*p2="acbde";
int ret=my_strcmp(p1,p2);
printf("%d\n",ret);
strncmp:
(受长度限制的字符串比较,第三个参数为比较字符的个数)
#include <string.h>
int strncmp(const char * str1, const char * str2, size_t num);
我们一般查文档时,看到如下两种null代表两种不同的意思
NULL – 空指针
Null或者NUL – \0
strstr:(查找字符串)
#include <string.h>
char * strstr(const char*, const char*);
找到对应字符串的地址,并将其打印出来。
模拟实现自己的strstr函数:
char*my_strstr(char*p1,char*p2)
{
assert(p1!=NULL);
assert(p2!=NULL);
//先把p1,p2地址用其他变量存起来
char*s1=p1;
char*s2=p2;
char*cur=p1;
//空字符串是任何一个字符串的子串
//空字符串也是有地址的,不等于空指针
//空指针是指不指向任何字符串的指针,而空字符串也是字符串哦
if(*p2=='\0')//若查找的字符串是空字符串
{
return p1;
}
while(*cur)
{
s1=cur;
s2=p2;
while((*s1!='\0')&&(*s2!='\0')&&(*s1==*s2))
{
s1++;
s2++;
}
if(*s2=='\0')
{
return cur;//找到子串
}
cur++;
}
return NULL;//找不到子串
}
char*a="abbbcde";
char*b="bbc";
char*c=my_strstr(a,b);
printf("%s\n",c);
strerror:获取指向错误消息字符串的指针
#include <string.h>
#include <errno.h>
char * strerror (int errnum);
strerror用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回.
返回值:返回值为char*类型,返回描述错误原因的字符串指针.
实例:
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt","r");
if( fp == NULL )
{
printf("Error: %s\n", strerror(errno));
}
return(0);
}
让我们编译并运行上面的程序,这将产生以下结果,因为我们尝试打开一个不存在的文件:
Error: No such file or directory
意思是没有这样的文件
相关文章
- 【Linux】嵌入式开发,在Linux中使用C语言对Fork函数执行子函数及父函数,命令ps 及 ls 操作
- 【C语言入门教程】5.2 函数的作用域规则(auto, static)
- 【C语言入门教程】5.1 函数说明 与 返回值
- iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
- C语言常见问题 如何用Visual Studio编写C语言程序测试
- C/C++学习----C语言简介
- ZZC语言代码风格
- 遗传算法的C语言实现(一):以非线性函数求极值为例
- 12个有趣的C语言面试题及答案
- C语言/C++常见习题问答集锦(六十三) 之endl引发的思考
- ZZNUOJ_C语言1092:素数表(函数专题)(完整代码)
- ZZNUOJ_C语言1108:打印数字图形(函数专题)(完整代码)
- ZZNUOJ_用C语言编写程序实现1143:最大值—多种进制(附完整源码)
- ZZNUOJ_用C语言编写程序实现1228:字符统计(附完整源码)
- 【C语言】详解线程回收函数 pthread_join
- C语言使用技巧(二十八):回顾memcpy()函数用法
- C语言之perror与strerror区别(三十三)
- 【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”
- 逆向——C语言的汇编表示之堆栈图 手把手示例 可以见后面在函数内部加一个局部变量以及嵌套调用的例子来综合理解
- C语言逆向汇编——参数局部变量、函数堆栈、调用约定和内嵌汇编码
- C语言---指针初阶---总结
- 数据类型-浮点型(C语言)
- 【维生素C语言】第三章 - 函数