关注

C语言中的字符串函数

strcmp的使用和模拟实现

strcpy的使用和模拟实现

strcat的使用和模拟实现

strstr的使用和模拟实现

strncmp的使用

strncpy的使用

strncat的使用

strtok的使用

perror的使用

1. strcmp的使用和模拟实现

标准规定:

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字
  • 如何判断两个字符串?比较两个字符串中对应位置上字符ASCII码值的大小。

模拟实现:

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;
}
2. strcpy的使用和模拟实现

标准规定:

  • 源字符串必须以’\0’结束。
  • 会将源字符串中的’\0’拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须可修改。

代码


#include <bits/stdc++.h>
using namespace std;
int main()
{
	char arr1[]="hello world";
	char arr2[]="xxxxxxxxxxxxxx";
	//char *p="xxxxxxxxxxxxxx"  不能够实现,因为这是常量字符串,不可修改
	strcpy(arr2,arr1);
	cout<<arr2<<"\n";//结果为hello world,因为\0也打印下来了。
}

模拟实现

void my_strcpy(char* dest,const char* src)
{
	assert(src!=NULL);
	assert(dest!=NULL);
	//拷贝\0前面的内容
	while(*dest++ = *src++)
	{
		;
	}
}
3. strcat的使用和模拟实现

标准规定:

  • 源字符串中必须以’\0’结束。
  • 目标字符串中也得有\0,否则没办法知道追加从哪里开始。
  • 目标空间必须有足够的大,能容纳下源字符串的内容。
  • 目标空间必须可修改。

模拟实现:

//本代码在遇到自己给自己赋值的时候,无法执行,但在c语言封装的库函数中可以执行
char* my_strcat(char*dest,const char*src)
{
  char* ret=dest;
  assert(dest&&src);
  while(*dest!='\0')
  {  
     dest++;
  }
  while(*dest++ = *src++)//当scr移动到\0时,会停止循环,\0就是数字0
  {
      ;
  }
  return ret;
}
int main()
{
   char arr1[20] = "abcdef";
   char arr2[20] = "ghi";
   my_strcat(arr1,arr2);
   printf("%s\n",arr1);
}
4. strstr的使用和模拟实现

标准规定

  • 函数返回字符串str2在字符串str1中第一次出现的位置。
  • 字符串的比较匹配不包含\0字符,以\0作为结束标志。

模拟实现

char* my_strstr(const char* str1,const char* str2)
{
  const char* s1=NULL;
  const char* s2=NULL;
  const char* cur=str1;
  if(*str2=='\0')
  return (char*)str1;
  while(*cur)
  {
     s1=cur;
     s2=str2;
     while(*s1!='\0'&&*s2!='\0'&&*s1==*s2)
     {
        s1++;
        s2++;
     }
     if(*s2=='\0')
     return (char*)cur;
     cur++;
  }
   return NULL;
}
5. strncmp的使用

使用标准

  • ⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0.
int strncmp ( const char * str1, const char * str2, size_t num );
6. strncpy的使用

标准规定

  • 拷贝num个字符从源字符串到目标空间。
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后面追加0,知道num个
char * strncpy(char * dest,const char * sour,size_t num);
7. strncat的使用

标准使用

  • 将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个 \0 字符。
  • 如果source指向字符串的长的小于num的时候,只会将字符串中到\0的内容追加到destination指向的字符串末尾。
char * strncat ( char * destination, const char * source, size_t num );
8. strtok的使用

标准使用

  • sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合。
  • 第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标记。
  • strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改。)
  • strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串中的位置。
  • strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标记。
  • 如果字符串中不存在更多的标记,则返回 NULL 指针
char * strtok ( char * str, const char * sep);
#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;
 }
9.strerror的使用

在这里插入图片描述

10. perror的使用

*在这里插入图片描述*

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2501_93639804/article/details/156313344

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--