字符函数和字符串函数-C语言

目录

前言

长度不受限字符串函数

一、strlen 的使⽤和模拟实现

1.描述

2.声明

3.实例

二、strcpy 的使⽤和模拟实现

1.描述

2.声明

3.参数

4.返回值

5.实例

三、strcat 的使⽤和模拟实现

描述

声明

参数

返回值

实例

四、 strcmp 的使⽤和模拟实现

1.描述

2.声明

3.参数

4.返回值

5.实例

6.实例

长度受限函数

1. strncpy 函数的使⽤

描述

声明

参数

返回值

实例

2. strncat 函数的使⽤

描述

声明

参数

返回值

实例

3. strncmp函数的使⽤

描述

声明

参数

返回值

实例

八、 strstr 的使⽤和模拟实现

描述

声明

参数

返回值

实例

九、strtok 函数的使⽤

描述

声明

参数

返回值

实例

十、strerror 函数的使⽤

描述

声明

参数

返回值

实例



前言

字符函数和字符串函数都是在编程中用来处理字符和字符串的函数。

字符函数是用来处理单个字符的函数,比如查找、替换、转换大小写、比较等操作。

字符串函数是用来处理整个字符串的函数,比如查找、替换、连接、分割等操作。


长度不受限字符串函数

一、strlen 的使⽤和模拟实现

1. 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包
'\0' )。
2. 参数指向的字符串必须要以 '\0' 结束。
3. 注意函数的返回值为 size_t,是⽆符号的
4. strlen的使⽤需要包含头⽂件
5. 学会strlen函数的模拟实现

1.描述

C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。

2.声明

下面是 strlen() 函数的声明。

size_t strlen(const char *str)

3.实例

下面的实例演示了 strlen() 函数的用法。

# include <stdio.h>
# include <string.h>
int main ()
{
      const char * str1 = "abcdef" ;
      const char * str2 = "bbb" ;
if ( strlen (str2)- strlen (str1)> 0 )
   {
      printf ( "str2>str1\n" );
  }
else
   {
       printf ( "srt1>str2\n" );
   }
return 0 ;
}

二、strcpy 的使⽤和模拟实现

源字符串必须以 '\0' 结束。
会将源字符串中的 '\0' 拷⻉到⽬标空间。
⽬标空间必须⾜够⼤,以确保能存放源字符串。
⽬标空间必须可修改

1.描述

C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

2.声明

下面是 strcpy() 函数的声明。

char *strcpy(char *dest, const char *src)

3.参数

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。

4.返回值

该函数返回一个指向最终的目标字符串 dest 的指针。

5.实例

下面的实例演示了 strcpy() 函数的用法。

char * my_strcpy ( char *dest, const char *src)
{
  char *ret = dest;
 assert(dest != NULL );
 assert(src != NULL );
  while ((*dest++ = *src++))
 {
 ;
 }
        return ret;
}

三、strcat 的使⽤和模拟实现

描述

C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

声明

下面是 strcat() 函数的声明。

char *strcat(char *dest, const char *src)

参数

  • dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
  • src -- 指向要追加的字符串,该字符串不会覆盖目标字符串。

返回值

该函数返回一个指向最终的目标字符串 dest 的指针。

实例

下面的实例演示了 strcat() 函数的用法。

char * my_strcat ( char *dest, const char *src)
  {
  char *ret = dest; 
      assert(dest != NULL );
      assert(src != NULL );
while (*dest)
{
    dest++;
}
while ((*dest++ = *src++))
{
;
}
    return ret;
}

四、 strcmp 的使⽤和模拟实现

1.描述

C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

2.声明

下面是 strcmp() 函数的声明。

int strcmp(const char *str1, const char *str2)

3.参数

  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。

4.返回值

该函数返回值如下:

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。

5.实例

下面的实例演示了 strcmp() 函数的用法。

6.实例

int my_strcmp ( const char * str1, const char * str2)
{
int ret = 0 ;
assert(str1 != NULL );
assert(str2 != NULL );
while (*str1 == *str2)
{
     if (*str1 == '\0' )
          return 0 ;
            str1++;
            str2++;
}
  return *str1-*str2;
}

长度受限函数

1. strncpy 函数的使⽤

描述

C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

声明

下面是 strncpy() 函数的声明。

char *strncpy(char *dest, const char *src, size_t n)

参数

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。
  • n -- 要从源中复制的字符数。

返回值

该函数返回最终复制的字符串。

实例

下面的实例演示了 strncpy() 函数的用法。

int main()

{
char arrl[]= "abcdef";

char arr2[20]="xxxxxxxxxx";

strncpy(arr2, arrl,3);

printf("%s\n", arr2);
return 0;

}

2. strncat 函数的使⽤

描述

C 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

声明

下面是 strncat() 函数的声明。

char *strncat(char *dest, const char *src, size_t n)

参数

  • dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
  • src -- 要追加的字符串。
  • n -- 要追加的最大字符数。

返回值

该函数返回一个指向最终的目标字符串 dest 的指针。

实例

下面的实例演示了 strncat() 函数的用法。

int main()

{
char arrl[]= "abcdef";

char arr2[20]="xx";

strncpy(arr2, arrl,3);

printf("%s\n", arr2);
return 0;

}

3. strncmp函数的使⽤

描述

C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

声明

下面是 strcmp() 函数的声明。

int strcmp(const char *str1, const char *str2)

参数

  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。

返回值

该函数返回值如下:

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。

实例

下面的实例演示了 strcmp() 函数的用法。

#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 小于 str2");
   }
   else if(ret > 0) 
   {
      printf("str1 大于 str2");
   }
   else 
   {
      printf("str1 等于 str2");
   }
   
   return(0);
}

八、 strstr 的使⽤和模拟实现

描述

C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

声明

下面是 strstr() 函数的声明。

char *strstr(const char *haystack, const char *needle)

参数

  • haystack -- 要被检索的 C 字符串。
  • needle -- 在 haystack 字符串内要搜索的小字符串。

返回值

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

实例

下面的实例演示了 strstr() 函数的用法。

# include <stdio.h>
# include <string.h>
int main ()
{
     char str[ ] = "hello world" ;
     char * pch;
    pch = strstr (str, "wo" );
strncpy (pch, "wo" , 2 );
printf ( "%s\n" , str);
return 0 ;
}

九、strtok 函数的使⽤

描述

C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

声明

下面是 strtok() 函数的声明。

char *strtok(char *str, const char *delim)

参数

  • str -- 要被分解成一组小字符串的字符串。
  • delim -- 包含分隔符的 C 字符串。

返回值

该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。

实例

下面的实例演示了 strtok() 函数的用法。

# include <stdio.h>
  # include <string.h>
  int main ()
  {
  char arr[] = "192.168.6.111" ;
  char * sep = "." ;
  char * str = NULL ;
  for (str = strtok(arr, sep); str != NULL ; str = strtok( NULL , sep))
 {
        printf ( "%s\n" , str);
 }
  return 0 ;
  }

十、strerror 函数的使⽤

描述

C 库函数 char *strerror(int errnum) 从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。strerror 生成的错误字符串取决于开发平台和编译器。

声明

下面是 strerror() 函数的声明。

char *strerror(int errnum)

参数

  • errnum -- 错误号,通常是 errno

返回值

该函数返回一个指向错误字符串的指针,该错误字符串描述了错误 errnum。

实例

下面的实例演示了 strerror() 函数的用法。

在Windows11+VS2022环境下输出的结果如下:
No error
Operation not permitted
No such file or directory
No such process
Interrupted function call
Input/output error
No such device or address
Arg list too long
Exec format error
Bad file descriptor
No child processes
举例:
# include <stdio.h>
# include <string.h>
# include <errno.h>
int main ()
{
     FILE * pFile;
     pFile = fopen ( "unexist.ent" , "r" );
if (pFile == NULL )
printf ( "Error opening file unexist.ent: %s\n" , strerror(errno));
return 0 ;
}
输出:
  Error opening file unexist.ent: No such file or directory

猜你喜欢

转载自blog.csdn.net/2402_82385099/article/details/136734231