当前位置: 首页 > news >正文

C语言的字符函数的使用与模拟实现

各位少年,大家好,我是博主那一脸阳光,今天给大家分享字符函数的使用与模拟实现。
前言:如果你想使用一个锤子非常方便,直接使用做好的就行,但是锤子是怎么构成的,你就不知所云了,模拟实现字符串,有助于提高我们的编程的能力与使用,

strlen的使⽤和模拟实现

strlen函数是用来计算字符串的长度的,遇到斜杠0就停止计算机。
原型如下:size_t strlen ( const char * str );

```c
#include<stdio.h>int main(){if((int)strlen("abc")-(int)strlen("abcdef")>0){printf("大于\n");}else{printf("小于等于\n);}
return 0;
}

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

strlen的模拟实现:

⽅式1:

int my_strlen(const char * str)
{int count = 0;assert(str);while(*str){count++;str++;}return count;
}

⽅式2:

//不能创建临时变量计数器
int my_strlen(const char * str)
{assert(str);if(*str == '\0')return 0;elsereturn 1+my_strlen(str+1);
}
//指针-指针的⽅式
int my_strlen(char *s)
{assert(str);char *p = s;while(*p != ‘\0)p++;return p-s;
}

strcpy 的使⽤和模拟实现

 char* strcpy(char * destination, const char * source );

• Copies the C string pointed by source into the array pointed by destination, including the
terminating null character (and stopping at that point).
• 源字符串必须以 ‘\0’ 结束。
• 会将源字符串中的 ‘\0’ 拷⻉到⽬标空间。
• ⽬标空间必须⾜够⼤,以确保能存放源字符串。
• ⽬标空间必须可修改。
• 学会模拟实现。

strcpy叫做字符串拷贝 把source内容拷贝进destination

#include<stdio.h>
int main()
{char arr1[20] = "xxxxxxxxxxxx";char arr2[] = "hello";strcpy(arr1, arr2);printf("%c\n", arr1);return 0;
}

上面这段代码 中str1指向第一个字符x,第二个arr指向h,所以这段字符。
是把arr2拷进去arr1字符里头去。那原先的就被替换表,但大家想想斜杠0在哪里呢?
在这里插入图片描述

很显然0保存了下来,但并不是斜杠0, 因为斜杠0是字符串结束标志
所以斜杠0没了,0保存了,
但是当你打印这个字符的数组的时候不会打印出来!

 ### 模拟实现//1.参数顺序
//2.函数的功能,停⽌条件
//3.assert
//4.const修饰指针
//5.函数返回值
//6.题⽬出⾃《⾼质量C/C++编程》书籍最后的试题部分
char *my_strcpy(char *dest, const char*src)
{ char *ret = dest;assert(dest != NULL);assert(src != NULL);while((*dest++ = *src++)){;}return ret;
}

strcat 的使⽤和模拟实现

• Appends a copy of the source string to the destination string. The terminating null character
in destination is overwritten by the first character of source, and a null-character is included
at the end of the new string formed by the concatenation of both in destination.
• 源字符串必须以 ‘\0’ 结束。
• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
• ⽬标空间必须可修改。
• 字符串⾃⼰给⾃⼰追加,如何?

#include<stdio.h>
int main()
{char arr1[20] = { "cb"};char arr2[] = "abcdef";printf("%s\n", strcat(arr1, arr2));return 0;
}

在这里插入图片描述
上面代码中,我们把arr2和arr1拼接在一起使用,就像拼图一样链接在一起的。

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;
}

上面我们模拟实现了stcat函数,我们通过while循环找到斜杠,然后斜杠0可以理解为0
下面代码通过循环把斜杠0的位置进行交换。

stcmp字符比较模拟实现

int strncmp ( const char * str1, const char * str2, size_t num );

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀
样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0
在这里插入图片描述

好先分享到这里,祝大家新年快乐,心想事成万事如意,

相关文章:

  • 表单标记(html)
  • 设计模式2-对象池模式
  • [职场] 如何通过运营面试_1 #笔记#媒体#经验分享
  • Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻
  • 【Linux】信号概念与信号产生
  • WebSocketServer+redis实时更新页面数据
  • 梯度提升树系列7——深入理解GBDT的参数调优
  • GPT-4登场:多模态能力革新,提升ChatGPT与必应体验,开放API助力游戏革新
  • c++ 子进程交互 逻辑
  • Zabbix6.x配置中文界面 解决乱码问题
  • Redis中内存淘汰算法实现
  • 容器基础:Docker 镜像如何保证部署的一致性?
  • Vim工具使用全攻略:从入门到精通
  • 【ESP32+Python】WIFI连接包括固定账号密码+选择WIFI在输入密码
  • spring boot学习第十一篇:发邮件
  • 30秒的PHP代码片段(1)数组 - Array
  • 345-反转字符串中的元音字母
  • cookie和session
  • Debian下无root权限使用Python访问Oracle
  • Django 博客开发教程 8 - 博客文章详情页
  • Golang-长连接-状态推送
  • golang中接口赋值与方法集
  • java小心机(3)| 浅析finalize()
  • Java应用性能调优
  • java中具有继承关系的类及其对象初始化顺序
  • jQuery(一)
  • oldjun 检测网站的经验
  • Otto开发初探——微服务依赖管理新利器
  • pdf文件如何在线转换为jpg图片
  • python 学习笔记 - Queue Pipes,进程间通讯
  • underscore源码剖析之整体架构
  • XForms - 更强大的Form
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 对象引论
  • 高程读书笔记 第六章 面向对象程序设计
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 聚簇索引和非聚簇索引
  • 浏览器缓存机制分析
  • 三分钟教你同步 Visual Studio Code 设置
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一文看透浏览器架构
  • 用Python写一份独特的元宵节祝福
  • ​如何防止网络攻击?
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $.proxy和$.extend
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (003)SlickEdit Unity的补全
  • (11)MATLAB PCA+SVM 人脸识别
  • (30)数组元素和与数字和的绝对差
  • (笔试题)分解质因式
  • (五)网络优化与超参数选择--九五小庞
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Linux+Windows下安装ffmpeg
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一