字符串处理函数系列

以下是标头 string.h 中定义的函数

01 memchr

void *memchr(const void *str, int c, size_t n)
描述:
	C 库函数void *memchr(const void *str, int c, size_t n)在参数str指向的字符串的前n个字节中搜索字符c(无符号字符)的第一次出现。
    
参数
    str -- 这是指向执行搜索的内存块的指针。
      c -- 这是要作为 int 传递的值,但该函数使用此值的无符号字符转换执行逐字节搜索。
      n -- 这是要分析的字节数。
    
返回值
	此函数返回一个指向匹配字节的指针,如果字符没有出现在给定的内存区域中,则返回 NULL
//例子
#include <stdio.h>
#include <string.h>
int main () {
    const char str[] = "http://www.hjq0x17c18.com";
    const char ch = '.';
    char *ret;
    ret = memchr(str, ch, strlen(str));
    printf("String after |%c| is - |%s|\n", ch, ret);
    return(0);
}

02 memcmp

int memcmp(const void *str1, const void *str2, size_t n)
描述
	C 库函数int memcmp(const void *str1, const void *str2, size_t n))比较内存区域str1和内存区域str2的前n 个字节。
    
参数
    str1 -- 这是指向内存块的指针。
    str2 -- 这是指向内存块的指针。
       n -- 这是要比较的字节数。

返回值
    如果返回值 < 0,则表示 str1 小于 str2。
    如果返回值 > 0,则表示 str2 小于 str1。
    如果返回值 = 0,则表示 str1 等于 str2。
#include <stdio.h>
#include <string.h>
int main () {
   char str1[15];
   char str2[15];
   int ret;
   memcpy(str1, "abcdef", 6);
   memcpy(str2, "ABCDEF", 6);
   ret = memcmp(str1, str2, 5);
   if(ret > 0) {
      printf("str2 is less than str1");
   } else if(ret < 0) {
      printf("str1 is less than str2");
   } else {
      printf("str1 is equal to str2");
   }   
   return(0);
}

03 memcpy

void *memcpy(void *dest, const void * src, size_t n)
描述
	C 库函数void *memcpy(void *dest, const void *src, size_t n)将n 个字符从内存区src复制到内存区dest。

参数
    dest -- 这是指向要复制内容的目标数组的指针,类型转换为 void* 类型的指针。
    src -- 这是指向要复制的数据源的指针,类型转换为 void* 类型的指针。
      n -- 这是要复制的字节数。

返回值
	此函数返回指向目标的指针,即 str1。
#include <stdio.h>
#include <string.h>
int main () {
   const char src[50] = "http://www.tutorialspoint.com";
   char dest[50];
   strcpy(dest,"Heloooo!!");
   printf("Before memcpy dest = %s\n", dest);
   memcpy(dest, src, strlen(src)+1);
   printf("After memcpy dest = %s\n", dest);   
   return(0);
}

04 memmove

void *memmove(void *str1, const void *str2, size_t n)
描述
	C 库函数void *memmove(void *str1, const void *str2, size_t n)将n 个字符从str2复制到str1,但对于重叠的内存块,memmove() 是比 memcpy() 更安全的方法。
    
参数
str1 -- 这是一个指向要复制内容的目标数组的指针,类型转换为 void* 类型的指针。
str2 -- 这是一个指向要复制的数据源的指针,类型转换为 void* 类型的指针。
   n -- 这是要复制的字节数。

返回值
	此函数返回指向目标的指针,即 str1。
#include <stdio.h>
#include <string.h>
int main () {
   char dest[] = "oldstring";
   const char src[]  = "newstring";
   printf("Before memmove dest = %s, src = %s\n", dest, src);
   memmove(dest, src, 9);
   printf("After memmove dest = %s, src = %s\n", dest, src);
   return(0);
}

05 memset

void *memset(void *str, int c, size_t n)
描述
C 库函数void *memset(void *str, int c, size_t n)将字符c(无符号字符)复制到参数str指向的字符串的前n 个字符。
    
参数
str -- 这是指向要填充的内存块的指针。
  c -- 这是要设置的值。该值作为 int 传递,但该函数使用该值的 unsigned char 转换来填充内存块。
  n -- 这是要设置为该值的字节数。
    
返回值
	此函数返回指向内存区域 str 的指针。  
#include <stdio.h>
#include <string.h>

int main () {
   char str[50];

   strcpy(str,"This is string.h library function");
   puts(str);

   memset(str,'$',7);
   puts(str);
   
   return(0);
}

06 strcat

char *strcat(char *dest, const char *src)
描述
	C 库函数char *strcat(char *dest, const char *src)将src指向的字符串附加到dest指向的字符串的末尾。
	
参数
    dest -- 这是指向目标数组的指针,它应该包含一个 C 字符串,并且应该足够大以包含连接的结果字符串。
     src -- 这是要附加的字符串。这不应与目的地重叠。
     
返回值
	此函数返回指向结果字符串 dest 的指针。
#include <stdio.h>
#include <string.h>
int main () {
   char src[50], dest[50];

   strcpy(src,  "This is source");
   strcpy(dest, "This is destination");
   strcat(dest, src);
   printf("Final destination string : |%s|", dest);
   
   return(0);
}

07 strncat

char *strncat(char *dest, const char *src, size_t n)
描述
	C 库函数char *strncat(char *dest, const char *src, size_t n)将src指向的字符串附加到dest指向的字符串的末尾,最多n 个字符长。	
参数
    dest -- 这是指向目标数组的指针,它应该包含一个 C 字符串,并且应该足够大以包含连接的结果字符串,其中包括额外的空字符。
     src -- 这是要附加的字符串。
       n -- 这是要附加的最大字符数。       
返回值
	此函数返回指向结果字符串 dest 的指针。
#include <stdio.h>
#include <string.h>
int main () {
   char src[50], dest[50];
   strcpy(src,  "This is source");
   strcpy(dest, "This is destination");
   strncat(dest, src, 15);
   printf("Final destination string : |%s|", dest);
   return(0);
}

08 strchr

char *strchr(const char *str, int c)
描述
	C 库函数char *strchr(const char *str, int c)在参数str指向的字符串中搜索字符c (无符号字符)的第一次出现。
参数
    str -- 这是要扫描的 C 字符串。
      c -- 这是要在 str 中搜索的字符。
返回值
	这将返回一个指向字符 c 在字符串 str 中第一次出现的指针,如果未找到该字符,则返回 NULL
#include <stdio.h>
#include <string.h>
int main () {
   const char str[] = "http://www.tutorialspoint.com";
   const char ch = '.';
   char *ret;
   ret = strchr(str, ch);
   printf("String after |%c| is - |%s|\n", ch, ret);
   return(0);
}

09 strcmp

int strcmp(const char *str1, const char *str2)
描述
	C 库函数int strcmp(const char *str1, const char *str2)将str1指向的字符串与str2指向的字符串进行比较	
参数
    str1 -- 这是要比较的第一个字符串。
    str2 -- 这是要比较的第二个字符串。
返回值
    该函数返回值如下:
        如果返回值 < 0,则表示 str1 小于 str2。
        如果返回值 > 0,则表示 str2 小于 str1。
        如果返回值 = 0,则表示 str1 等于 str2。
#include <stdio.h>
#include <string.h>
int main () {
   char str1[15];
   char str2[15];
   int ret;
   strcpy(str1, "abcdef");
   strcpy(str2, "ABCDEF");
   ret = strcmp(str1, str2);
   if(ret < 0) {
      printf("str1 is less than str2");
   } else if(ret > 0) {
      printf("str2 is less than str1");
   } else {
      printf("str1 is equal to str2");
   } return(0);
}

10 strncmp

int strncmp(const char *str1, const char *str2, size_t n)
描述
	C 库函数int strncmp(const char *str1, const char *str2, size_t n)最多比较str1和str2的前n 个字节。
参数
    str1 -- 这是要比较的第一个字符串。
    str2 -- 这是要比较的第二个字符串。
       n -- 要比较的最大字符数。
返回值
    该函数返回值如下:
        如果返回值 < 0,则表示 str1 小于 str2。
        如果返回值 > 0,则表示 str2 小于 str1。
        如果返回值 = 0,则表示 str1 等于 str2。       
#include <stdio.h>
#include <string.h>
int main () {
   char str1[15];
   char str2[15];
   int ret;
   strcpy(str1, "abcdef");
   strcpy(str2, "ABCDEF");
   ret = strncmp(str1, str2, 4);
   if(ret < 0) {
      printf("str1 is less than str2");
   } else if(ret > 0) {
      printf("str2 is less than str1");
   } else {
      printf("str1 is equal to str2");
   } return(0);
}

11 strcoll

int strcoll(const char *str1, const char *str2)
描述
	C 库函数int strcoll(const char *str1, const char *str2)比较字符串str1和str2。结果取决于位置的 LC_COLLATE 设置。
参数
    str1 -- 这是要比较的第一个字符串。
    str2 -- 这是要比较的第二个字符串。	
返回值
    该函数返回值如下:
        如果返回值 < 0,则表示 str1 小于 str2。
        如果返回值 > 0,则表示 str2 小于 str1。
        如果返回值 = 0,则表示 str1 等于 str2。    
#include <stdio.h>
#include <string.h>
int main () {
   char str1[15];
   char str2[15];
   int ret;
   strcpy(str1, "abc");
   strcpy(str2, "ABC");
   ret = strcoll(str1, str2);
   if(ret > 0) {
      printf("str1 is less than str2");
   } else if(ret < 0) {
      printf("str2 is less than str1");
   } else {
      printf("str1 is equal to str2");
   } return(0);
}

13 strcpy

char *strcpy(char *dest, const char *src)
描述
	C 库函数char *strcpy(char *dest, const char *src)将src指向的字符串复制到dest。
参数
    dest -- 这是指向要复制内容的目标数组的指针。
     src -- 这是要复制的字符串。
返回值
	这将返回指向目标字符串 dest 的指针。  
#include <stdio.h>
#include <string.h>
int main () {
   char src[40];
   char dest[100];
   memset(dest, '\0', sizeof(dest));
   strcpy(src, "This is tutorialspoint.com");
   strcpy(dest, src);
   printf("Final copied string : %s\n", dest);   
   return(0);
}

13 strncpy

char *strncpy(char *dest, const char *src, size_t n)
描述
	C 库函数char *strncpy(char *dest, const char *src, size_t n)从src指向的字符串复制最多n 个字符到dest。如果 src 的长度小于 n,dest 的剩余部分将用空字节填充。
参数
    dest -- 这是指向要复制内容的目标数组的指针。
     src -- 这是要复制的字符串。
       n -- 要从源复制的字符数。
返回值
	此函数返回指向复制的字符串的指针。
#include <stdio.h>
#include <string.h>
int main () {
   char src[40];
   char dest[12];
   memset(dest, '\0', sizeof(dest));//使用函数 memset() 来清除内存位置。
   strcpy(src, "This is tutorialspoint.com");
   strncpy(dest, src, 10);
   printf("Final copied string : %s\n", dest);   
   return(0);
}

14 strcspn

size_t strcspn(const char *str1, const char *str2)
描述
	C 库函数size_t strcspn(const char *str1, const char *str2)计算str1的初始段的长度并扫描str1以查找属于str2的任何字符的第一次出现,返回第一次出现之前读取的str1的字符数。搜索包括终止空字符。因此,如果在str1中找不到str2的任何字符,该函数将返回str1的长度。
参数
    str1 -- 这是要扫描的主要 C 字符串。
    str2 -- 这是包含要在 str1 中匹配的字符列表的字符串。
返回值
	此函数返回字符串 str1 的初始段中不在字符串 str2 中的字符数。
#include <stdio.h>
#include <string.h>
int main () {
   int len;
   const char str1[] = "ABCDEF4960910";
   const char str2[] = "013";
   len = strcspn(str1, str2);
   printf("First matched character is at %d\n", len + 1); 
   return(0);
}

15 strerror

char *strerror(int errnum)
描述
	C 库函数char *strerror(int errnum)在内部数组中搜索错误编号errnum并返回指向错误消息字符串的指针。strerror产生的错误字符串取决于开发平台和编译器。
参数
	errnum -- 这是错误号,通常是errno。	
返回值
	此函数返回一个指向描述错误 errnum 的错误字符串的指针。
#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);
}

16 strlen

size_t strlen(const char *str)
描述
	C 库函数size_t strlen(const char *str)计算字符串str的长度,但不包括终止空字符。
参数
	str -- 这是要找到其长度的字符串。
返回值
	此函数返回字符串的长度。
#include <stdio.h>
#include <string.h>
int main () {
   char str[50];
   int len;
   strcpy(str, "This is tutorialspoint.com");
   len = strlen(str);
   printf("Length of |%s| is |%d|\n", str, len);
   return(0);
}

17 strpbrk

char *strpbrk(const char *str1, const char *str2)
描述
	C 库函数char *strpbrk(const char *str1, const char *str2)查找字符串str1中与str2中指定的任何字符匹配的第一个字符。这不包括终止空字符。
参数
    str1 -- 这是要扫描的 C 字符串。
    str2 -- 这是包含要匹配的字符的 C 字符串。
返回值
	此函数返回指向 str1 中与 str2 中的字符之一匹配的字符的指针,如果未找到此类字符,则返回 NULL
#include <stdio.h>
#include <string.h>
int main () {
   const char str1[] = "abcde2fghi3jk4l";
   const char str2[] = "34";
   char *ret;
   ret = strpbrk(str1, str2);
   if(ret) {
      printf("First matching character: %c\n", *ret);
   } else {
      printf("Character not found");
   }  
   return(0);
}

18 strrchr

char *strrchr(const char *str, int c)
描述
	C 库函数char *strrchr(const char *str, int c)在参数str指向的字符串中搜索字符c (无符号字符)的最后一次出现。
参数
    str -- 这是 C 字符串。    
      c -- 这是要定位的字符。它作为其 int 提升传递,但在内部转换回 char。	
返回值
	该函数返回一个指向字符在 str 中最后一次出现的指针。如果未找到该值,则该函数返回一个空指针。     
#include <stdio.h>
#include <string.h>
int main () {
   int len;
   const char str[] = "http://www.tutorialspoint.com";
   const char ch = '.';
   char *ret;
   ret = strrchr(str, ch);
   printf("String after |%c| is - |%s|\n", ch, ret);
   return(0);
}

19 strspn

size_t strspn(const char *str1, const char *str2)
描述
	C 库函数size_t strspn(const char *str1, const char *str2)计算str1的初始段的长度,该段完全由str2中的字符组成。
参数
    str1 -- 这是要扫描的主要 C 字符串。
    str2 -- 这是包含要在 str1 中匹配的字符列表的字符串。
返回值
	此函数返回 str1 的初始段中仅包含 str2 中的字符的字符数。    
#include <stdio.h>
#include <string.h>
int main () {
   int len;
   const char str1[] = "ABCDEFG019874";
   const char str2[] = "ABCD";
   len = strspn(str1, str2);
   printf("Length of initial segment matching %d\n", len );   
   return(0);
}

20 strstr

char *strstr(const char *haystack, const char *needle)
描述
	C 库函数char *strstr(const char *haystack, const char *needle)函数查找字符串haystack中第一次出现的子字符串needle。不比较终止字符“\0”
参数
    haystack -- 这是要扫描的主要 C 字符串。
    needle -- 这是要在 haystack 字符串中搜索的小字符串。
返回值
	此函数返回指向 needle 中指定的任何整个字符序列在 haystack 中首次出现的指针,如果该序列不存在于 haystack 中,则返回空指针。   
#include <stdio.h>
#include <string.h>
int main () {
   const char haystack[20] = "TutorialsPoint";
   const char needle[10] = "Point";
   char *ret;
   ret = strstr(haystack, needle);
   printf("The substring is: %s\n", ret); 
   return(0);
}

21 strtok

char *strtok(char *str, const char *delim)
描述
	C 库函数char *strtok(c​​har *str, const char *delim)使用分隔符delim将字符串str分成一系列标记。
参数
    str - 此字符串的内容被修改并分解为更小的字符串(标记)。
    delim -- 这是包含分隔符的 C 字符串。这些可能因一次呼叫而异。
返回值
	此函数返回指向字符串中找到的第一个标记的指针。如果没有要检索的标记,则返回空指针。  
#include <string.h>
#include <stdio.h>
int main () {
   char str[80] = "This is - www.tutorialspoint.com - website";
   const char s[2] = "-";
   char *token;
  
   /* get the first token */
   token = strtok(str, s);  
   /* walk through other tokens */
   while( token != NULL ) {
      printf( " %s\n", token );    
      token = strtok(NULL, s);
   } 
   return(0);
}

22 strxfrm

size_t strxfrm(char *dest, const char *src, size_t n)
描述
	C 库函数size_t strxfrm(char *dest, const char *src, size_t n)将字符串src的前n 个字符转换为当前语言环境,并将它们放入字符串dest中。
参数
    dest -- 这是指向要复制内容的目标数组的指针。如果 n 的参数为零,则它可以是空指针。
     src -- 这是要转换为当前语言环境的 C 字符串。
       n -- 要复制到 str1 的最大字符数。  
返回值
	此函数返回转换后的字符串的长度,不包括终止空字符。    
#include <stdio.h>
#include <string.h>
int main () {
   char dest[20];
   char src[20];
   int len;
   strcpy(src, "Tutorials Point");
   len = strxfrm(dest, src, 20);
   printf("Length of string |%s| is: |%d|", dest, len);  
   return(0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值