保姆级讲解字符串函数(上篇)

目录

字符分类函数

导图

函数介绍 

1.getchar

2. isupper 和 islower

字符转换函数:(toupper , tolower) 与 putchar

字符串函数

导图

 string函数的使用和模拟实现

string的使用

 求字符串长度

字符串的比较 

string函数的模拟实现

strcpy 与 strncpy

 strcpy的使用

 strcpy函数模拟实现 

strncpy的使用 

strcat 与 strncat 

strcat的使用

strcat函数模拟实现 

strncat的使用 

strcmp 与strncmp 

strcmp的使用

strcmp函数模拟实现 

strncmp的使用 


 

字符分类函数

导图


函数介绍 

1.getchar

看下列代码:输入字符,判断大小写

int main()
{//接收字符char ch = getchar();if (ch >= 'a' && ch <= 'z'){printf("%c是小写\n", ch);}else if(ch > 'A' && ch < 'Z'){printf("%c是大写\n", ch);}return 0;
}

 控制台输出

 

2. isupper 和 islower

判断大小写

#include<ctype.h>
int main()
{int ch = getchar(); //接收字符串if (islower(ch)){printf("小写\n");}else if (isupper(ch)){printf("大写\n");}return 0;
}

字符转换函数:(toupper , tolower) 与 putchar

把下列字符串全部转换为大写/小写 

#include<ctype.h>
int main()
{char a[] = "I am a programmer and blogger named Bai Zihuan";int i = 0;while (a[i]){/*转为大写*///if (islower(a[i]))//{//	a[i] -= 32;//}/*转为小写*/if (isupper(a[i])){a[i] += 32;}putchar(a[i]);    //输出字符串i++;}printf("\n");return 0;
}

 

控制台输出显示 

 


字符串函数

导图

 string函数的使用和模拟实现

string的使用

注:

1..包含头文件 #include<string.h>

2.函数原型:size_t strlen( const char* str )

3.string返回类型为 size_t(无符号类型)

4.输出格式:%zd

 求字符串长度
#include<string.h>
int main()
{char a[] = "abcdef";size_t len = strlen(a);printf("%zd\n", len);return 0;
}

控制台输出:6 


 

字符串的比较 
#include<string.h>
int main()
{const char* a1 = "abcdefg";//字符串表达式,前加const,不可修改const char* a2 = "abcde";if (a1 - a2 > 0)printf("大于\n");else if (a1 - a2 < 0)printf("小于\n");elseprintf("等于\n");return 0;
}

控制台输出:大于 


string函数的模拟实现

1.计数方式

2.递归(不能创建临时变量)

3.指针 - 指针

//1.奇数方式
size_t my_strlen1(const char* str)
{size_t count = 0;assert(str);       //保证str为有效指针while (*str)       //*str != '\0'{count++;str++;}return count;
}//2.递归(不能创建临时变量)
size_t my_strlen2(const char* str)
{assert(str);        //保证str为有效指针if (*str == '\0')return 0;elsereturn 1 + my_strlen2(str + 1);
}//3.指针-指针
size_t my_strlen3(const char* str)
{assert(str);         //保证str为有效指针const char* p = str; //用指针标记首字符地址while (*p)           //*p != '\0'{p++;}return p - str;      //字符末尾('\0'前一个字符) - 首字符}int main()
{const char* ch = "abcdefg";size_t ret = my_strlen3(ch);printf("%zd\n", ret);return 0;
}

 控制台显示输出:7


strcpy 与 strncpy

 strcpy的使用

函数原型:char* strcpy(char* destination,const char* source)

理解为:把参数source的字符串 拷贝(复制)destination 中去

                           (源字符串)                             (目标空间)

int main()
{char str1[20] = "xxxxxxxxx";char str2[] = "hello";strcpy(str1, str2);printf("%s\n", str1);return 0;
}

 

strcpy使用注意事项 

 


 strcpy函数模拟实现 

char* my_strcpy(char* str1, const char* str2)
{char* ret = str1;         //用指针标记str1首字符地址assert(str1 && str2);     //保证str1和str2为有效指针while (*str1++ = *str2++) //while循环直至*str1 = *str2{;}return ret;               //返回标记首字符地址
}int main()
{char str1[20] = { 0 };char str2[] = "hello";my_strcpy(str1, str2);printf("%s\n", my_strcpy(str1, str2));return 0;
}

strncpy的使用 

函数原型:char* strncpy(char* destination,const char* source,size_t num )

int main()
{//拷贝复制 --strnpychar p1[20] = "xxxxxxxxx";char p2[] = "hello";strncpy(p1, p2, 3);return 0;
}

 

 


strcat 与 strncat 

strcat的使用

函数原型:char* strcat(char* destination,const char* source)

                                                destination <-- 追加    source

int main()
{char a[15] = "programmer ";char a1[] = "Bai";char* ret = strcat(a, a1);printf("%s\n", a);return 0;
}

 控制台输出显示 

 

 注意事项与调试步骤


strcat函数模拟实现 

char* my_strcat(char* str1, const char* str2)
{char* p = str1;         //标记str1首字符串的地址assert(str1 && str2);   //保证str1和str2为有效指针//while循环追加while (*str1){str1++;}//拷贝while ((*str1++ = *str2++)){;}return p;                //返回str1首字符地址
}int main()
{char a[15] = "programmer ";char a1[] = "Bai";my_strcat(a, a1);printf("%s\n", a);return 0;
}

strncat的使用 

函数原型:char* strncat(char* destination,const char* source,size_t num )

int main()
{//追加  -- strncatchar str1[20] = "hello ";char str2[] = "world";strncat(str1, str2, 3);return 0;
}

  注意事项与调试步骤


strcmp 与strncmp 

strcmp的使用

函数原型:int strcmp(const char* destination,const char* source)

int main()
{int ret = strcmp("abcdef", "abcf");if (ret > 0){printf("大于\n");}else if (ret < 0){printf("小于\n");}else{printf("等于\n");}return 0;
}

  代码解释

控制台结果显示:大于 


strcmp函数模拟实现 

int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);  //保证str1和str2指针的有效性while (*str1 == *str2) //当str1和str2的解引用相等{if (*str1 == '\0')return 0;str1++;str2++;}return *str1 - *str2;
}int main()
{int ret = my_strcmp("abcdef","abcdef");if (ret > 0){printf("大于\n");}else if (ret == 0){printf("等于\n");}else{printf("小于\n");}return 0;
}

strncmp的使用 

函数原型:int strncat(const char* str1,const char* str2,size_t num )

代码解释:

比较str1和str2的前num个字符,如果相等就继续往后比较,最多⽐较num个字⺟,

如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。

如果num个字符都相等,就是相等返回0.

int main()
{//比较 -- strncmpint ret = strncmp("abcde", "abcq", 5);if (ret > 0){printf("大于\n");}else if (ret < 0){printf("小于\n");}else{printf("等于\n");}return 0;
}

 

 ***********************************************************分割线*****************************************************************************
紧接和期待下文!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“生活原本沉闷,但跑起来就有风”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/272439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于PSO粒子群算法的三角形采集堆轨道优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 假设一个收集轨道&#xff0c;上面有5个采集堆&#xff0c;这5个采集堆分别被看作一个4*20的矩阵&#xff08;下面只有4*10&#xff09;&#xff0c;每个模块&…

Java多线程学习的关键要点和常见案例总结

文章目录 Java多线程学习的关键要点&#xff1a;案例示例&#xff1a; Java多线程编程还包括更多的高级特性和实用技巧高级主题&#xff1a;实用案例&#xff1a;线程池的高级用法和配置&#xff1a;线程安全的最佳实践&#xff1a; Java多线程学习的关键要点和常见案例总结如下…

防患未然,OceanBase巡检工具应用实践——《OceanBase诊断系列》之五

1. OceanBase为什么要做巡检功能 尽管OceanBase拥有很好的MySQL兼容性&#xff0c;但在长期的生产环境中&#xff0c;部署不符合标准规范、硬件支持异常&#xff0c;或配置项错误等问题&#xff0c;这些短期不会出现的问题&#xff0c;仍会对数据库集群构成潜在的巨大风险。为…

血泪教训双非计算机考研避坑指南

记住&#xff0c;考研不是要考多少分&#xff0c;而是要上岸&#xff0c;上岸&#xff0c;上岸&#xff01;&#xff01;&#x1f621; 一、坏、渣、难、险&#xff0c;一律打咩 坏: 歧视本科院校‼️ 这个就不用多说了&#xff0c;你明明付出了大于等于别人的努力&#xff0c;…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

运维打工人,兼职跑外卖的第二个周末

北京&#xff0c;晴&#xff0c;西南风1级。 前序 今天天气还行&#xff0c;赶紧起来&#xff0c;把衣服都洗洗&#xff0c;准备准备&#xff0c;去田老师吃饭早饭了。 一个甜饼、一个茶叶蛋、3元自助粥花费7.5。5个5挺吉利的。 跑外卖的意义 两个字减肥&#xff0c;记录刚入…

JavaWeb03-HTTP协议,Tomcat,Servlet

目录 一、HTTP协议 1.概述 2.特点 3.请求数据格式 &#xff08;1&#xff09;请求行 &#xff08;2&#xff09;请求头 &#xff08;3&#xff09;请求体 &#xff08;4&#xff09;常见请求头 &#xff08;5&#xff09;GET和POST请求区别 4.响应数据格式 &#xf…

分销商城微信小程序:用户粘性增强,促进复购率提升

在数字化浪潮的推动下&#xff0c;微信小程序作为一种轻便、高效的移动应用形式&#xff0c;正成为越来越多企业开展电商业务的重要平台。而分销商城微信小程序的出现&#xff0c;更是为企业带来了前所未有的机遇。通过分销商城微信小程序&#xff0c;企业不仅能够拓宽销售渠道…

PyQt5实现远程更新exe可执行文件

PyQt5实现远程下载更新exe可执行文件 1、实现流程 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新2、效果图 3、示例代码 conf.ini配置文件: {"http_address_edit_value": "http://xxx.com/xxx/xxx.exe&qu…

数据结构从入门到精通——队列

队列 前言一、队列1.1队列的概念及结构1.2队列的实现1.3队列的实现1.4扩展 二、队列面试题三、队列的具体实现代码Queue.hQueue.ctest.c队列的初始化队列的销毁入队列出队列返回队头元素返回队尾元素检测队列是否为空检测元素个数 前言 队列是一种特殊的线性数据结构&#xff…

【蓝桥杯-单片机】基础模块LED和按键

文章目录 【蓝桥杯-单片机】Led、按键等基础模块01 前置准备&#xff08;1&#xff09;新建工程&#xff08;4&#xff09;编写程序 02 基础模块&#xff1a;LED&#xff08;0&#xff09;LED原理图&#xff08;1&#xff09;对P1整体赋值&#xff0c;控制所有的LED灯&#xff…

three.js如何实现简易3D机房?(一)基础准备-下

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;&#xff08;一&#xff09;基础准备-上&#xff1a;http://t.csdnimg.cn/MCrFZ 目录 四、按需引入 五、导入模型 四、按需引入 index.vue文件中 <template><div class"three-area">&l…

算法第二十五天-寻找排序数组中的最小值

寻找排序数组中的最小值 题目要求 解题思路 二分法 代码 class Solution:def findMin(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:pivot low (high - low) // 2if nums[pivot] < nums[high]:high pivot else:low pivot 1re…

计算两帧雷达数据之间的变换矩阵

文章目录 package.xmlCMakeLists.txtpoint_cloud_registration.cc运行结果 package.xml <?xml version"1.0"?> <package format"2"><name>point_cloud_registration</name><version>0.0.0</version><descriptio…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…

Spring Boot中实现图片上传功能的两种策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

js 清空数组的方法

1、直接赋值空数组 let array [1, 2, 3, 4, 5]; array []; 这种方法并不推荐&#xff0c;如下图所示&#xff1a; 虽然a数组确实变为了空数组&#xff0c;但这种方法只是修改了a的指向&#xff0c;把a指向一个新的空数组&#xff0c;然而[1,2,3,4,5]这个数组并没有被清除&a…

Matlab偏微分方程拟合 | 完整源码 | 视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

Python——与Matlab对应的Python版本

参考资料&#xff1a; Python——与Matlab对应的Python版本

基于java+springboot+vue实现的学生信息管理系统(文末源码+Lw+ppt)23-54

摘 要 人类现已进入21世纪&#xff0c;科技日新月异&#xff0c;经济、信息等方面都取得了长足的进步&#xff0c;特别是信息网络技术的飞速发展&#xff0c;对政治、经济、军事、文化等方面都产生了很大的影响。 利用计算机网络的便利&#xff0c;开发一套基于java的大学生…