参考:string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)
作者:一只青木呀
发布时间: 2020-09-19 13:57:48
网址:https://blog.csdn.net/weixin_45309916/article/details/108679027

目录

  • 前言
  • 字符串函数大全
  • 字符串函数详解
    • memchr
    • memcmp
    • memcpy
    • memmove
    • memset
    • strcat
    • strchr
    • strcmp
    • strcoll
    • strcpy
    • strcspn
    • strerror
    • strlen
    • strncat
    • strncmp
    • strncpy
    • strpbrk
    • strrchr
    • strspn
    • strstr
    • strtok
    • strxfrm

前言

C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

使用时都需要加上头文件

string.h

字符串函数大全

函数 功能
memchr 在内存块中定位字符的位置还有相似函数memrchr和rawmemchr
memcmp 把两个内存块的内容进行比较。
memcpy 复制内存块的内容
memmove 移动内存块中的内容
memset 以字节方式填充内存块
strcat 把一个字符串后追加到另一个字符串后
strchr 在字符串中查找一个字符的第一个位置指针
strcmp 比较两个字符串(ASCII)
strcoll 比较两个字符串(根据指定的 LC_COLLATE)
strcpy 复制字符串
strcspn 在一个字符串中查找另一个字符串中的第一个出现的字符的位置
strerror 解释错误代码
strlen 返回字符串长度
strncat 把一个字符串的 n 个字符后追加到另一个字符串后
strncmp 比较两个字符串的前 n 个字符(ASCII)
strncpy 复制字符串中的前 n 个字符
strpbrk 查找字符串中第一个出现的属于另一个字符串的任意字符的指针
strrchr 查找字符串中一个字符的出现的最后位置
strspn 计算字符串的从开头起符合另一个字符串的连续字符个数
strstr 在一个字符串中查找另一个字符串
strtok 根据指定字符集分割一个字符串
strxfrm 根据当前环境转化字符串,将转化后的前 n 个字符复制给另一个字符串

字符串函数详解

memchr

  • 函数原型:
void *memchr(const void *s, int c, size_t n);
  • 功能:在参数 s 所指向的内存块的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置,并返回相应的指针。

  • 返回值:找到返回相应的指针,否则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>char str[1000], ch, *pch;int main(){gets(str);ch = getchar();//void类型转化成char类型 void也是一种类型pch = (char*) memchr(str, ch, strlen(str));       // memchr 的使用if ( pch != NULL){printf ("%c found at %d.\n", ch, pch - str);//地址减去地址 得到相应的位置}else{printf ("%c not found.\n", ch);}return 0;
}
  • 运行结果:

memcmp

  • 函数原型:
int memcmp(const void *s1, const void *s2, size_t n);
  • 功能:memcmp()函数比较内存区域s1和s2的前n个字节(每个都被解释为无符号字符)。

  • 返回值:返回一个指向dest的指针。

返回值 意义
大于零 ptr1 < ptr2
等于零 ptr1 == ptr2
小于零 ptr1 > ptr2
  • demo:
#include <stdio.h>
#include <string.h>char s1[20], s2[20];int main(){while(1){gets(s1);gets(s2);int n = memcmp(s1, s2, sizeof(s1));if ( n > 0 ){printf ("'%s' is greater.n is %d\n", s1,n);}else if( n == 0 ){printf ("'%s' is the same as '%s'.   n is %d\n", s1, s2,n);}else{printf ("'%s' is greater.n is %d\n", s2,n);}memset(s1,0,sizeof(s1));memset(s2,0,sizeof(s2));}return 0;
}
  • 运行结果

memcpy

  • 函数原型:
void *memcpy(void *dest, const void *src, size_t n);
  • 函数功能:从内存区src复制n个字节到内存区dest。内存区不能重叠。只会覆盖。

  • 返回值:返回一个指向dest的指针。

  • demo:

#include <string.h>
#include <stdio.h>char s1[] = "abcdefg", s2[100]={'0'};int main()
{memcpy(s2, s1, strlen(s1) + 1);printf (" s2 is '%s'.\n", s2);return 0;
}
  • 运行结果

memmove

  • 函数原型:
void *memmove(void *dest, const void *src, size_t n);
  • 函数功能:memmove()函数将n个字节从内存区域src拷贝到内存区域dest。这些内存区域可能重叠:复制发生在
    虽然src中的字节首先被复制到一个不重叠src或dest的临时数组中,然后到dest的临时数组。

  • 返回值:返回一个指向dest的指针。

  • demo

//去掉了字符串前面的 4 个空格。
#include <stdio.h>
#include <string.h>char s[] = "    too space";int main(){memcpy(s, s+4, strlen(s+4)+1);printf ("s is '%s'.\n",s);return 0;
}
  • 运行结果

memset

  • 函数原型
void *memset(void *s, int c, size_t n);
  • 函数功能:用常量字节c填充s指向的内存区域的前n个字节。

  • 返回值:返回一个指向内存区域s的指针。

  • demo

#include <stdio.h>
#include <string.h>char str[] = "hello world!";int main(){memset(str, '-', strlen(str));puts(str);return 0;
}
  • 运行效果

strcat

  • 函数原型:
char * strcat ( char * des, const char * src );
  • 函数功能:将 src 中的内容追加到 des中。

  • 返回值:返回 des指针。

  • demo:

#include <stdio.h>
#include <string.h>char s1[] = "hello ", s2[] = "world!";int main(){strcat(s1,s2);puts(s1);return 0;
}
  • 运行结果

strchr

  • 函数原型:
char *strchr(const char *s, int c);
  • 函数功能:返回 s中的 c出现的第一个位置的指针。

  • 返回值:如果找到,返回 s中的 c出现的第一个位置的指针;否则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strchr(str, ch);if ( pch != NULL){printf (" '%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0;
}
  • 运行效果

strcmp

  • 函数原型:
 int strcmp(const char *s1, const char *s2);
  • 功能:比较字符串 str1 和 str2 的字典序大小(ASCII)。

  • 返回值:

返回值 意义
小于零 str1 < str2
等于零 str1 == str2
大于零 str1 > str2
  • demo:
#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = strcmp(s1, s2);if ( n > 0 ){printf ("\"%s\" is greater.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\".\n", s1, s2);}else{printf ("\"%s\" is greater.\n", s2);}return 0;
}
  • 运行效果

strcoll

  • 函数原型:
 int strcoll(const char *s1, const char *s2);
  • 功能:默认情况下(LC_COLLATE 为 “POSIX” 或 “C” )和 strcmp 一样根据 ASCII 比较字符串大小。对于设置了 LC_COLLATE 语言环境的情况下,则根据 LC_COLLATE 设置的语言排序方式进行比较。例如:汉字,根据拼音进行比较

  • 返回值:

返回值 意义
小于零 str1 < str2
等于零 str1 == str2
大于零 str1 > str2
  • demo:
#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = strcoll(s1, s2);if ( n > 0 ){printf ("\"%s\" is greater.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\".\n", s1, s2);}else{printf ("\"%s\" is greater.n\n", s2);}return 0;
}
  • 运行结果

strcpy

  • 函数原型:
char *strcpy(char *dest, const char *src);
  • 功能:将 src的内容复制给 des,需要保证 des足够容纳 src的空间

  • 返回值: 返回 des。

  • demo:

#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[100];int main(){strcpy(s2, s1);printf ("s2 is '%s'.\n", s2);return 0;
}
  • 运行效果

strcspn

  • 函数原型:
size_t strspn(const char *s, const char *accept);
  • 功能:返回 s 中出现的第一个属于 accept 的字符的位置。

  • 返回值: 如果找到返回字符位置,否则返回字符串长度。

  • demo:

#include <stdio.h>
#include <string.h>int main(){int pos = strcspn("qwert1234des","0123456789");printf("%d\n", pos);return 0;
}
  • 运行结果:

strerror

  • 函数原型:
char * strerror ( int errnum );
  • 函数功能:给出错误代码 errnum 的描述内容。

  • 返回值:返回描述错误内容的字符串指针。

  • demo:

#include <stdio.h>
#include <string.h>
#include <errno.h>int main(){FILE *f = fopen("unexist.file", "r");if( f == NULL ){printf ("Error: %s\n",strerror(errno));}return 0;
}

strlen

  • 函数原型:
size_t strlen ( const char * str );
  • 函数功能:返回字符串 str 的长度。

  • 返回值:返回字符串 str 的长度。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "hello world!";printf("%d\n", strlen(a));return 0;
}

strncat

  • 函数原型:
char * strncat ( char * destination, const char * source, size_t num );
  • 函数功能:将 source 中的前 num 个字符串追加到 destination 后。

  • 返回值:返回追加后的 destination 指针。

  • demo:

#include <stdio.h>
#include <string.h>char s1[] = "hello ", s2[] = "world! -----";int main(){strncat(s1, s2, 6);puts(s1);return 0;
}

strncmp

  • 函数原型:
int strncmp ( const char * str1, const char * str2, size_t num );
  • 函数功能:比较 str1 中的前 num 个字符和 str2 中 的前 num 个字符的大小。

  • 返回值:

返回值 意义
小于零 str1 < str2
等于零 str1 == str2
大于零 str1 > str2
  • demo
#include <stdio.h>
#include <string.h>char s1[] = "abcdfgh", s2[] = "abcdefg";int main(){int n = strncmp(s1, s2, 4);if ( n > 0 ){printf ("\"%s\" is greater in the first 4.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\" in the first 4.\n", s1, s2);}else{printf ("\"%s\" is greater in the first 4.\n", s2);}return 0;
}

strncpy

  • 函数原型:
char * strncpy ( char * destination, const char * source, size_t num );
  • 函数功能:将 source 中的前 num 个字符复制给 destination。如果 source 的长度大于 num,不会自动追加 \0。若小于,则会填充\0,直到长度为 num。

  • 返回值:返回 destination 的指针。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[1000], b[1000] = "hello world!";strncpy(a, b, 5);       //不会自动补 NULLa[5] = '\0';puts(a);return 0;
}

strpbrk

  • 函数原型:
char * strpbrk ( char * str1, const char * str2 );
  • 函数功能:查找字符串 str1 中第一个出现的属于字符串 str2 中的任意字符的指针。

  • 返回值:返回字符串 str1 中第一个出现的属于字符串 str2 中的任意字符的指针。若没找到,返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "This is a test.", b[] = "aeiou";char *pch  = strpbrk(a, b);printf("%d\n", pch - a);return 0;
}

strrchr

  • 函数原型:
char * strrchr ( char * str, int character );
  • 函数功能:在字符串中 str 查找最后一个 character 的指针位置。

  • 返回值:如果找到,在字符串中 str 查找最后一个 character 的指针位置。否则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strrchr(str, ch);if ( pch != NULL ){printf ("'%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0;
}

strspn

  • 函数原型:
size_t strspn ( const char * str1, const char * str2 );
  • 函数功能: 计算 str1 字符串从开头开始的连续字符,且这些字符都完全是 str2 所指字符串中的字符。

  • 返回值:返回字符的个数。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "aaaaauuuuuxxxsada", b[] = "aeiou";int n = strspn(a, b);printf("%d\n", n);    //输出为10,满足条件的字符串为aaaaauuuuu。return 0;
}

strstr

  • 函数原型:
const char * strstr ( const char * str1, const char * str2 )
char * strstr ( char * str1, const char * str2 )
  • 函数功能:查找字符串 str1 中首次出现字符串 str2 的位置。

  • 返回值:返回 str1 中首次出现 str2 的位置的指针,如果 str1 中不存在 str2 则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "hello world!", b[] = "world";char *pch = strstr(a, b);printf("%d\n", pch - a);return 0;
}

strtok

  • 函数原型:
char * strtok ( char * str, const char * delimiters );
  • 函数功能:根据 delimiters 指定的内容进行分割。第一次需传入待分割的字符串 str 指针,之后的调用传入 NULL 即可。

  • 返回值:返回指向分割后相应的片段的指针。

  • demo:

#include <stdio.h>
#include <string.h>char str[] ="- This is a sample string.";int main (){char *pch = strtok(str, " .-,");while( pch != NULL){printf("%s\n", pch);pch = strtok(NULL, " .-,");}return 0;
}

strxfrm

  • 函数原型:
size_t strxfrm ( char * destination, const char * source, size_t num );
  • 函数功能说明:根据当前环境(由LC_COLLATE所指定)转化 source 字符串,并将前 num 个字符复制给 destination。

  • 返回值:返回转换后的字符串的长度。

C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)相关推荐

  1. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  2. C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)

    内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...

  3. c语言fputc输入字符串,C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    C语言fgetc和fputc函数用法详解(以字符形式读写文件),文件,字符,指针,函数,字节 C语言fgetc和fputc函数用法详解(以字符形式读写文件) 易采站长站,站长之家为您整理了C语言fge ...

  4. c语言 freopen txt_C语言文件操作函数freopen详解

    C语言文件操作函数freopen详解 今天做USACO 用到了文件的操作. 之前做USACO只是格式化的.些 写 freopen("xxx.in","r",st ...

  5. lisp不是函授型语言_lisp函数大全详解

    lisp函数大全详解 AutoLISP提供了大量的预定义函数.若将函数名(大小写都可)作为表中的第一个元素函数变元(若有的话)作为表中后面的元素,就可以调用那个函数.本章按字母顺序列出AutoLISP ...

  6. 计算机科学类专升本复习之“C语言fgetc和fputc函数用法”详解(初稿)

    C语言fgetc和fputc函数用法详解(以字符形式读写文件) 在C语言中,"读写"文件比较灵活,既可以每次"读写一个字符",也可以"读写一个字符串& ...

  7. matlab对图像操作函数的详解(笔记1)

    matlab对图像操作函数的详解 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.ti ...

  8. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表

    R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 目录 R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 收缩两列数据

  9. R语言tidyr包spread()函数实战详解:数据裂变、从窄表到宽表

    R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表 目录 R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表

最新文章

  1. css position的父级,css position absolute 相对于父元素的设置方式
  2. matlab ufunc,ufunc函数
  3. 央行允许银行倒闭破产,那么储户的存款怎么办?
  4. pyqt5 获取Qlabel中的图片并对其进行处理(包括Qimage转换为Mat)
  5. C++笔记-二级指针在反汇编中的形式
  6. Qt中设置窗体固定大小的方法
  7. ExtJS4.2 menu鼠标移开隐藏
  8. 【WIP_S3】链表
  9. 如何制作频数折线图(详细)
  10. Android菜单不显示图标,Android系统手机让通知栏不显示某个软件的图标 | 坐倚北风...
  11. 计算机网络科研项目申请书,唐乾利:如何进一步完善医药类科研课题申请书
  12. excel如何根据身份证批量提取员工年龄?
  13. Flash地址空间的数据读取——STM32
  14. 学习Java. 基础 17: 二维数组
  15. c# wifi串口通信_在C#中实现串口通信的方法
  16. 【计算机网络】-TCP的拥塞控制及拥塞控制方法
  17. rebar3简单使用
  18. 华为交换机查看网口光功率命令
  19. ip白名单实现java
  20. 社区生态 | openEuler、龙蜥Anolis、统信UOS三大主流操作系统下编译GreatSQL二进制包

热门文章

  1. python每天1道面试题(3)--字符串组合
  2. 12.4日团队工作总结
  3. 以太坊钱包开发系列4 - 发送Token(代币)
  4. 8.1 文件查找local;find使用
  5. (转载)Qt中MOC的一些限制
  6. Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)...
  7. Linux下svn搭建配置
  8. 《CLR via C#》读书笔记 之 参数
  9. windows server 2012 初安装体验
  10. char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?