【C语言】常用字符串函数大全(超详笔记收藏必备)(下)

简介: 【C语言】常用字符串函数大全(超详笔记收藏必备)(下)

strncmp



把 str1 和 str2 进行比较,最多比较前 num个字符


int strncmp ( const char * str1, const char * str2, size_t num );

参数说明:


str1 – 要进行比较的第一个字符串。

str2 – 要进行比较的第二个字符串。

n – 要比较的最大字符数。


标准规定:返回值

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字


函数使用方法:


#include <stdio.h>
#include <string.h>
int main()
{
    char str1[] = "abcdef";
    char str2[] = "ABCDEF";
    int ret = 0;
    ret = strncmp(str1, str2,4);
    if (ret < 0)
    {
        printf("str1 小于 str2");
    }
    else if (ret > 0)
    {
        printf("str1 大于 str2");
    }
    else
    {
        printf("str1 等于 str2");
    }


最终输出结果:

str1 大于 str2


strchr



用于查找字符串中的一个字符,并返回该字符在字符串中第一次出现的位置。


char *strchr(const char *str, int c)

参数说明:

str :在str字符串中查找

C: 要定位的字符。它作为其 int 提升传递,但在内部转换回 char 进行比较。


返回值:

如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,如果未找到该字符则返回 NULL。


函数使用方法:


#include<string.h>
#include<stdio.h>
int main()
{
  const char str[] = "abcef";
  const char c = 'e';
  char* arr = strchr(str, c);
  if (str == NULL)
  {
    printf("该字符串不存在该字符\n");
  }
  else
  {
    printf("%s\n", arr);
  }
  return 0;
}


最终输出结果:

ef


strrchr



查找字符串中最后一个出现的字符


char *strrchr(const char *str, int c)

参数说明:

str: 在str字符串中查找 c第一次出现的字符

c : 要定位的字符。它作为其 int 提升传递,但在内部转换回 char。


返回值:

如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,如果未找到该字符则返回 NULL。


函数使用方法:


#include<string.h>
#include<stdio.h>
int main()
{
  char arr[] = "caaa,ceee";
  char c = 'c';
  char* str = strrchr(arr, c);
  if (str == NULL)
  {
    printf("该字符串不存在该字符\n");
  }
  else
  {
    printf("%s\n", str);
  }
  return 0;
}


最终输出结果:

ceee


strtok



切割字符串 (该函数使用方法较难,请耐心看完)


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

参数说明:

str : 要被分解成一组小字符串的字符串。

sep: 所要切割字符串。这些可能因调用而异


返回值:

当s中的字符查找到末尾时,返回NULL;

如果查不到sep 所标示的字符,则返回当前strtok的字符串的指针。


注意事项:

1.sep参数是个字符串,定义了用作分隔符的字符集合

2第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符

分割的标记。

3.strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指

针。

4.strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时

拷贝的内容并且可修改。

5.strtok函数的第一个参数不为NULL时 ,函数将找到str中第一个标记,strtok函数将保

存它在字符串中的位置。

6.strtok函数的第一个参数为 NULL时 ,函数将在同一个字符串中被保存的位置开始,查

找下一个标记

7.如果字符串中不存在更多的标记,则返回 NULL 指针


可能有点抽象,那就结合下面代码跟注释一起耐心观看。


#include<string.h>
#include<stdio.h>
int main()
{
  char str[] = "XM@Life.CSDN";
  char sep[] = "@.";//所要分割的字符
  //第一次分割时不为NULL时,strtok函数将保存它在字符串中的位置
  //并把&改为 '\0' 此时的字符串为"XM'\0'Life.CSDN"
  //打印了XM
  char* arr = strtok(str, sep);
  printf("%s\n", arr);
  //strtok函数的第一个参数为 NULL时 ,函数将在同一个字符串中被保存的位置开始,查找下一个标记
  //此时从'\0'下一个位置开始寻找接收Life.CSDN
  //并把.改为 '\0' 此时的字符串为"XM'\0'Life'\0'CSDN"
  //打印了Life
  arr = strtok(NULL, sep);
  printf("%s\n", arr);
  //strtok参数依然为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记
  //此时从刚刚.变成的'\0' 下一个位置开始查找,遇见'\0'就停止了
  //打印了CSDN
  arr = strtok(NULL, sep);
  printf("%s\n", arr);
  //字符串中不存在更多的标记,则返回 NULL 指针。
  arr = strtok(NULL, sep);
  printf("%s\n", arr);
  return 0;
}


最终输出结果

XM

Life

CSDN

NULL


可能大家发现这样的函数使用太过生硬,如果seq 切割字符串过长,那要写多少个arr。下面有个成妙的方法可以解决这个问题


函数使用方法:


#include<string.h>
#include<stdio.h>
int main()
{
  char str[] = "XM@Life.CSDN";
  char sep[] = "@.";//所要分割的字符
  char* arr = NULL; //先初始化arr
  for (arr = strtok(str, sep); arr != NULL; arr = strtok(NULL, sep))
  {
    printf("%s\n", arr);
  }
  return 0;
}


最终输出结果

XM

Life

CSDN


gets



从标准流输入中获取字符串.(标准流可以理解成键盘输入);


注意事项:

C 标准在 2011 年明确地从其规范中删除了此功能。

该函数在 C/C++ 中已弃用(自 2014 年标准起)。

如果依然要使用,会报警告,而且非常危险。

这里建议使用类型的库函数 fgets,相比gets安全。


fgets



从任意流stream 读取一行,并把它存储在 str 所指向的字符串内,当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止。该文件操作函数可以当做gets函数使用


char *fgets(char *str, int n, FILE *stream)

参数说明:

  • str – 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
  • n – 这是要读取的最大字符数(包括最后的空字符)。
  • stream – 指向读取的流。当然第三个参数也可以所有输入流如:stdin(标准流可以理解

成键盘输入) 类似gets一样可以使用从键盘输入


返回值:

如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。


函数类似gets使用方法:

(这里只简单介绍如何当做gets函数使用)


#include<stdio.h>
#include<stdlib.h>
int main()
{
  char str[50] = { 0 };
  fgets(str, 10, stdin);
  printf("%s\n", str);
  return 0;
}


输入:abc

最终输出结果:abc

目录
相关文章
|
1月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
25天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
21 0
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
1月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
1月前
|
C语言
【C语言】模拟实现深入了解:字符串函数
【C语言】模拟实现深入了解:字符串函数
|
3月前
|
安全 程序员 C语言
【C语言】字符串函数及其模拟实现
【C语言】字符串函数及其模拟实现
|
3月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
62 0
|
3月前
|
存储 安全 编译器
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
当然可以用scanf和printf输入输出,这里在之前【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)已经讲过了,这里就不再赘述,主要介绍只针对字符的函数.
55 0
|
3月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
3月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)