字符串函数的使用以及模拟实现(一)

举报
执久呀 发表于 2022/02/18 12:21:06 2022/02/18
【摘要】 ​目录    一、前言    二、字符串函数        1.strlen函数strlen函数模拟实现2.strcpy函数         strcpy函数模拟实现一、前言     字符串函数也是库函数,他给我们日常编程提供了极大的帮助,所以我们必须认识并且学会这些函数的使用。(头文件是string.h)二、字符串函数1.strlen函数函数的参数形式 size_t  strlen(con...


目录


    一、前言

    二、字符串函数

        1.strlen函数

strlen函数模拟实现

2.strcpy函数

         strcpy函数模拟实现



一、前言

     字符串函数也是库函数,他给我们日常编程提供了极大的帮助,所以我们必须认识并且学会这些函数的使用。(头文件是string.h)


二、字符串函数

1.strlen函数

函数的参数形式 size_t  strlen(const char* str);

size_t表示的是无符号数,const放的位置表示*str所指向的内容不可以被改变。

strlen函数的特点是遇到’\0’就停止了,且只能用来求字符的长度

具体实现如下:

#include<stdio.h>
#include<string.h>

int main()
{
  char arr[]={"yangying"};//杨颖
  int len=strlen(arr);
  printf("len=%d",len);
  return 0;
}

    这样一个简单的strlen用法就写完了,但是不代表这个函数到此结束啊,满级选手你说是吧

那么既然还没结束,我们显然还要讲讲这个函数实现的原理(直接模拟实现一下)。ok!!!!

咱们废话不多说,直接开整。

strlen函数模拟实现

#include<stdio.h>

#include<assert.h>

int my_strlen(char *p)//用p指针去接受传过来的arr数组首元素地址。也可以用arr[]接收
 {
   assret(p!=NULL);
    int count=0;//用来计数的
   while(*p)//也可以写成*p!='\0'
   {
      p++;     //这里也可以写成while(*p++)
     count++;
   }
 return count;//返回count的值
 }

int main()
 {
  char arr[30]={0};

  printf("请输入要计算的字符串长度\n");

  scanf("%s",&arr);

  int len=my_strlen(arr);//模拟函数的创建,用len接受他的返回值

  printf("len=%d\n",len);
 
  return 0;
 }

注意:strlen是无符号是,所以strlen("字符串")-strlen("字符串")必是大于0的数。

#include<stdio.h>
#include<string.h>

int main()
{
	size_t count = strlen("kong") - strlen("hellochao");//得到的结果必定大于0
	printf("count=%u", count);
	return 0;
}

得到的结果为

 为负数存的是补码,以%u打印打印出无符号的补码

2.strcpy函数

函数的参数形式char* strcpy(char*destination,const char*source);

该参数说明了strcpy返回类型是char类型的指针,将源头(不能被改)拷贝到目的地。

strcpy特点和strlen类似,遇到‘\0’就停止拷贝,也是只能拷贝字符,目的地的空间必须大些以便

于存下源头文件。

具体实现如下:

#include<stdio.h>

#include<string.h>

int main()
{
  char arr1[30]={"hello"};

  char arr2[30]={"kongchao"};

  strcpy(arr1,arr2);

  printf("%s",arr1);

 return 0;
}

strcpy函数模拟实现

#include<string.h>

#include<string.h>

#include<assert.h>

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

 {
   assert(dest&&src);//断言,防止传过来是NULL;

    char*pp=dest;//记下dest的初始地址防止找不到

    while(*dest++=*src++)
     {
        ;     //这里啥也不做;
     }
  return pp;//返回初始地址
 }


int main()

 {
   char arr1[30]={"nihao"};
     
   char arr2[20]={"haohaoxuexi"};

    my_strcpy(arr1,arr2);

   printf("%s",arr1);

   return 0;
   
 }

小伙伴们学习愉快,希望大佬们指正

顺便支持一波

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。