字符串函数介绍&应用(二)

简介: 字符串函数介绍&应用

2.8 strstr函数


char * strstr ( const char *str1, const char * str2);


函数功能:


  • 在str1字符串中查找str2是否存在,存在则返回str2在str1中的起始地址,若不存在则返回空指针。


使用案例:


#include <stdio.h>
#include <string.h>
int main ()
{
    char str[] ="This is a simple string";
    char * pch;
    pch = strstr (str,"simple");
    strncpy (pch,"sample",6);
    puts (str);
    return 0;
}


0f629d306b4cafa14e68a21415ca6d95_70b8a9ae4ed24a13837896c2e7d7f655.png


strstr函数的模拟实现:


char* my_strstr(const char* str1,const char* str2)
{
    if (!*str2)
        return ((char*)str1);
    char* cp = str1;
    char* s1 = str1;
    char* s2 = str2;
    while (*cp)
    {
        s1 = cp;
        s2 = str2;
        while ((*s1 == *s2) && *s2 && *s1)
        {
            s1++;
            s2++;
        }
        if (*s2 == '\0')
        {
            return cp;
        }
        cp++;
    }
    return NULL;
}
int main()
{
    char str1[] = "illoveyou";
    char str2[] = "love";
    char* pch;
    pch = my_strstr(str1,str2);
    printf("%s", pch);
    return 0;
}

cp指针用于记录str1字符串中开始匹配的位置,而s1,s2指针负责移动,并且观测所指向的字符是否相同,cp指针的起始位置不能为 '\0',s2字符串匹配到了 '\0'则说明str1中是包含str2字符串的。strstr函数的模拟实现较为复杂,建议小伙伴们自己多模拟几次。


2.9 strtok函数


char * strtok ( char * str, const char * sep );


函数功能:sep指向存储分隔符的数组。str是待分割的数组,函数每执行一次,就会将str字符串的一个字符串置为 '\0'并返回第一段字符串的首地址。例如:


int main()
{
  char arr[] = "nihao@world.net";
  char sep[] = "@";
  char* ret = strtok(arr, sep);
  printf("%s", ret);
  return 0;
}

b9bf8aba606ea646fede995c30fb4f38_655195e7c58e4c06ac8971e788a3497e.png


函数要求:


  • sep参数是个字符串,定义了用作分隔符的字符集合。
  • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
  • strtok函数找到str中的下一个标记,并将其用\0 结尾,返回一个指向这个标记的指针。
  • 若strtok函数的第一个参数不为NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
  • strtok函数的第一个参数为NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  • 如果字符串中不存在更多的标记,则返回NULL 指针。


注意:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。


使用案例:


int main()
{
  char arr1[] = "nihao@111#222.333";
  char arr2[20] = { 0 };
  strcpy(arr2, arr1);
  char sep[] = "@.#";
  char* ret = NULL;
  for (ret = strtok(arr2, sep); ret != NULL; ret = strtok(NULL, sep))
  {
  printf("%s\n", ret);
  }
  return 0;
}


image.png


2.10 strerror函数


char * strerror ( int errnum );


strerror函数的参数是一个错误码,函数接收了一个错误码之后会返回一个char*类型的参数,这个参数指向该错误码所对应的错误信息,我们可以通过打印这个函数的返回值来获取具体的错误信息。库函数在调用过程中如果出错了,会将错误码复制给errno这个变量,errno这个变量是C语言自己提供的一个全局变量,专门用于存放库函数的错误码。


我们可以通过strerror函数来查看1-9错误码分别代表哪些错误信息:


int main()
{
  for (int i = 0; i < 10; i++)
  {
  printf("%d:%s\n", i,strerror(i));
  }
  return 0;
}


0faa3c11c601c93dac00e28a5251bd77_0b4233c38f82457c8219d0aaff6cb91a.png


使用案例:例如这里文件如果打开失败了,errno这个变量就会保存文件打开失败所对应的错误码,再通过strerror这个函数将对应的错误信息翻译出来并打印。


int main()
{
  FILE* pFile;
  pFile = fopen("unexist.ent", "r");
  if (pFile == NULL)
  printf("Error opening file unexist.ent: %s\n", strerror(errno));
  return 0;
}


11c4014b50d7ac08e7b299bb977a4ac8_93f7690d30254dcca85fab96bb76168a.png


由上可知,strerror只是返回错误信息字符的首地址,我们想要将其显示在屏幕上还需要调用printf函数,另一个函数可以同时实现这两个功能。那就是perror函数。


perror函数的使用案例:perror函数的参数是一个供打印的字符串,即:perror函数的参数也是会被打印出来的,可以对perror传入提示型的字符串。


int main()
{
  FILE* pFile;
  pFile = fopen("unexist.ent", "r");
  if (pFile == NULL)
  perror("FILE:");
  return 0;
}


e3a6d3e8fc2b2bae717835811310fe03_8e0734942cd145a19fe3539a4ff4dc33.png


3.字符转换函数


常用的字符串函数已经介绍的差不多了。接下来就来看看字符转换函数吧。字符转换函数有两个:


  • int tolower ( int c );//将c所对应的字母转化成小写,原本就是小写则保持不变
  • int toupper ( int c );//将c所对应的字母转化成大写,原本就是大写则保持不变


注意:


  1. 这两个函数的参数必须是字母才有效。
  2. 要包含 ctype.h头文件。


使用案例:


#include <stdio.h>
#include <ctype.h>
int main()
{
  int i = 0;
  char str[] = "Test String.\n";
  char c;
  while (str[i])
  {
  c = str[i]; 
  c = tolower(c);
  putchar(c);
  i++;
  }
  return 0;
}

636e3af0ab606ee0bf7e6d9e05bf4b5a_03b7dabdd3714b91b2f5cdc1c4b057b0.png


4.完结


本章的内容就到这里啦,若有不足,欢迎评论区指正,下期见!


相关文章
|
4月前
|
安全 C语言
需要知道的字符串函数
需要知道的字符串函数
|
4月前
字符串函数
字符串函数
|
存储 C语言
字符串函数介绍&应用(一)
字符串函数介绍&应用
|
9月前
|
C语言
字符函数和字符串函数(下)
字符函数和字符串函数(下)
|
10月前
|
编译器
C详细的字符串函数
C详细的字符串函数
55 0
|
9月前
详解字符函数和字符串函数-1
详解字符函数和字符串函数
35 0
|
11月前
|
编译器 C语言 Python
字符函数和字符串函数(上)
字符函数和字符串函数(上)
42 0
|
C语言
一文带你玩转C库中的一系列字符串函数
一文带你玩转C库中的一系列字符串函数
62 2