zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

意思是没有这样的文件