计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!

一,使用   递归   计算 字符串 的 长度

1,题目描述

2,分析题目

Ⅰ,题目中要求除了函数的形参,函数中不能够使用多余的变量(这是比较苛刻的要求)。

Ⅱ,根据此,很自然的想到需要使用递归来解决问题。

Ⅲ,字符串的结束标志是'\0',因此可以将 读取到'\0' 作为结束条件

3,关于递归的基本知识

Ⅰ,递归包含两个过程:
        递推的过程。

        回归的过程。

Ⅱ,递归的两个必要条件:

        ①:必须有限制条件来结束递推,否则会造成死递归,最终导致栈溢出(内存爆满)。

        ②:随着不断地递推,越来越接近限制条件

4,解决问题

如图所示:

假设输入 yes

红色部分的是递推的过程

绿色部分的是回归的过程

5,代码解决

在代码中具体分析问题

#define _CRT_SECURE_NO_WARNINGS 1
//写一个函数Strlen,可以求字符串长度,除了函数的形参,函数中不能使用多余的变量。
//输入一个字符串(字符串长度小于等于30,中间不包含空格),使用Strlen函数可以求字符串的长
//度,并返回。
//注:字符串的结束标志是\0,//思路:
//递归:包含两个过程 1,递推的过程 , 2,回归的过程
//递归包含两个 必要 的条件:
//1,存在一个限制条件可以 使得递归结束,否则就会导致无限递归 ,最终导致 栈区溢出
//2,随着不断的递归 ,越来越接近 限制条件
#include<stdio.h>
#include<string.h>
#define LEN 100
int my_strlen(char* pstr)
{if (*pstr == '\0'){return 0;}else{return (1 + my_strlen(pstr + 1));//地址加 1,往后走}
}//求字符串的长度
int main()
{char str[LEN] = { 0 };//输入gets(str);//求字符串的长度int len = my_strlen(str);//数组传参传的是首元素的地址//打印printf("%d\n", len);return 0;
}

二,指针 减 指针  来计算字符串的长度

1,题目描述

2,分析题目

Ⅰ,字符串的结束标志是'\0'。

Ⅱ,记录 字符串中起始 字符的地址(start)地址 ++往后走,直到遇到 '\0‘截止此时的’\0'的地址  减去 起始字符的地址(start)  就是 字符串的长度。

3,解决问题

在代码中具体分析,如下:

#include<stdio.h>
//写一个函数Strlen,可以求字符串长度,除了函数的形参,函数中不能使用多余的变量。
//输入一个字符串(字符串长度小于等于30,中间不包含空格),使用Strlen函数可以求字符串的长
//度,并返回。
//注:字符串的结束标志是 \0//思路:
//指针 减 指针
#define LEN 1000
#include<string.h>
int my_strlen(char* pstr)
{char* start = pstr;//首元素的地址while (*pstr)//当没有遇到 '\0' 的时候,地址 ++{pstr++;}return (pstr - start);//'\0'的地址 减去 数组中首元素的地址 就是字符串的长度
}
int main()
{char str[LEN] = { 0 };gets(str);//输入int len = my_strlen(str);//数组传参传的是数组中首元素的地址//打印printf("%d\n", len);return 0;
}

三,使用  计数器  来统计字符串的长度

1,题目描述

2,分析题目

Ⅰ,字符串的结束标志是'\0'。

Ⅱ,定义 计数器 cnt 来统计 字符串中字符的个数。

3,解决问题

在代码中具体分析,如下:

#define _CRT_SECURE_NO_WARNINGS 1
//写一个函数Strlen,可以求字符串长度,注:字符串的结束标志是\0
//输入一个字符串(字符串长度小于等于30,中间不包含空格),使用Strlen函数可以求字符串的长
//度,并返回。
#include<stdio.h>
//思路:
//1,字符串的结束标志是 '\0';
//2,遍历 所输入的字符串 遇到 '\0' 截至
#include<string.h>
int my_strlen(char* pstr)
{int cnt = 0;//计数器 //记录数组中的字符的个数while (*pstr)//当 没有指向 '\0'时 , cnt ++,pstr++;{cnt++;pstr++;}return cnt;
}
int main()
{char str[31] = { 0 };gets(str);//输入int ret = my_strlen(str);//数组传参传的是首元素的地址//打印printf("%d\n", ret);return 0;
}
//总结;'\0'是字符串结束的标志

总结:

1,递归  的过程 较为 抽象, 一定要通过来 画图 理解 。

2,画图将抽象的问题实例化,一定要坚持 画图

3,字符串在内存中是连续存放的。

4,指针的类型决定了在对指针解引用的时候访问几个字节。

5,欢迎分享,感谢阅读!

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

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

相关文章

k3s-安装、卸载、证书过期x509

k3s-安装、卸载、证书过期 K3S 是轻量级的 Kubernetes。易于安装&#xff0c;仅需要 Kubernetes 内存的一半&#xff0c;所有组件都在一个小于 100 MB 的二进制文件中。 环境准备 # 配置yum源 yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyu…

回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实OOA-LSTM基于鱼鹰优化算法优化长短期记忆网络的多输入单输出数据回归预测模型 &#xff08;多指标&a…

20231228在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单前置摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单前置摄像头ov13850 2023/12/28 10:42 【碰到一个很神奇的问题】&#xff1a; 昨天晚上前置摄像头怎么也点不亮&#xff01;改了巨多的地方&#xff01;晚上睡觉之前把开发板彻底断电了&#xff01;今天开电脑…

STM32的在线升级(IAP)实现方法:BOOT+APP原理详解

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; STM32参考手册 1 在线升级&#xff08;IAP&#xff09;设计思路 为了实现STM32的在线升级&#xff08;IAP&#xff09;功能&#xff0c;通常会将STM32的FLASH划分为BOOT和APP两个部分&#xff0c;BOO…

虚幻UE 光源-色温和光度学

文章目录 一、色温二、光度学1、lux勒克斯2、cd坎德拉3、nit尼特4、总结 三、EV曝光值 一、色温 色温可以简单的认为就是颜色的温度。 但他是有范围的&#xff0c;也是有要求的&#xff0c;并不是所有的颜色都可以有色温。 以上就是色温范围图。 而这些颜色的温度是怎么定义…

【算法每日一练]-数论 (保姆级教程 篇2 )#行列式 #甜甜花研究 #约数个数 #模数 #数树 #盒子与球

目录 今日知识点&#xff1a; 辗转相减法化下三角求行列式 组合数动态规划打表 约数个数等于质因数的次方1的乘积 求一个模数 将n个不同的球放入r个不同的盒子&#xff1a;f[i][j]f[i-1][j-1]f[i-1][j]*j 行列式 甜甜花的研究 约数个数 模数 数树 盒子与球 行列…

github短视频去除水印项目Douyin_TikTok_Download_API介绍

当下正值短视频盛行的时代。在我们浏览短视频的同时&#xff0c;经常能发现一些精美的图片、引人入胜的文案以及吸引眼球的视频&#xff0c;想要将它们保存到本地。然而&#xff0c;保存下来的图片或视频通常伴随着不太愉悦的水印&#xff0c;这显著降低了使用体验。因此&#…

开源数据可视化分析工具DataEase本地部署并实现远程访问

目录 前言 1. 安装DataEase 2. 本地访问测试 3. 安装 cpolar内网穿透软件 4. 配置DataEase公网访问地址 5. 公网远程访问Data Ease 6. 固定Data Ease公网地址 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊开源数据可视化分析工…

element的form表单校验(身份证号、手机号、整数、汉字、for循环列表)

<template><div class"FormPage"><el-form ref"form" :model"form" :rules"rules" label-width"100px"><el-form-item label"姓名:" prop"name"><el-input v-model"fo…

25道RabbitMQ面试题含答案(很全)

1. 什么是RabbitMQ RabbitMQ是一个开源的消息队列系统&#xff0c;它使用AMQP&#xff08;高级消息队列协议&#xff09;标准。RabbitMQ的主要目标是提供可靠的消息传递&#xff0c;确保消息的可靠性和顺序性&#xff0c;同时提供灵活的路由和消息确认机制。 RabbitMQ基于AMQ…

Unity坦克大战开发全流程——游戏场景——游戏界面——设置界面复用

游戏场景——游戏界面——设置界面复用 先将开始场景当中的设置面板复制过来 由于设置面板挂载的脚本都是相同的&#xff0c;在BeginScene中关闭设置面板时不会报空&#xff0c;而在GameScene中关闭设置面板时却会报空&#xff0c;这是因为监听事件中的单例模式调用的实例是Beg…

基于机器视觉的害虫种类及计数检测研究-人工智能项目-附代码

概述 农业与民生和经济发展息息相关&#xff0c;对农业发展科学化的关注既是民生需求&#xff0c; 也是经济稳步发展的迫切需求。病虫害是影响农作物生长的重要因素&#xff0c;对农作物的产量和品质都能造成无法估计的损害。 - 针对目前广大农业产区农业植保人员稀缺、病虫害…

爬虫基础一(持续更新)

爬虫概念&#xff1a; 通过编写程序&#xff0c;模拟浏览器上网&#xff0c;然后让其去互联网上抓取数据的过程 分类&#xff1a; 1&#xff0c;通用爬虫&#xff1a;抓取一整张页面数据 2&#xff0c;聚焦爬虫&#xff1a;抓取页面中的局部内容 3&#xff0c;增量式爬虫&…

【UnityShader入门精要学习笔记】(2)GPU流水线

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 上节复习GPU流水线顶点着色…

Linux操作系统极速入门[常用指令]

linux概述&#xff1a; Linux是一套免费使用和自由传播的操作系统 我们为什么要学&#xff0c;Linux&#xff1f; 主流操作系统&#xff1a; linux系统版本&#xff1a; 内核版&#xff1a; 由linux核心团队开发&#xff0c;维护 免费&#xff0c;开源 负责控制硬件 发行版&…

红队攻防实战之DC2

吾愿效法古圣先贤&#xff0c;使成千上万的巧儿都能在21世纪的中华盛世里&#xff0c;丰衣足食&#xff0c;怡然自得 0x01 信息收集: 1.1 端口探测 使用nmap工具 可以发现开放了80端口&#xff0c;网页服务器但是可以看出做了域名解析&#xff0c;所以需要在本地完成本地域名…

RISC Zero的Babybear域 及其 扩域

1. 引言 前序博客见&#xff1a; 有限域的Fast Multiplication和Modular Reduction算法实现 代码实现见&#xff1a; https://github.com/risc0/risc0/blob/main/risc0/core/src/field/baby_bear.rshttps://github.com/risc0/risc0/tree/main/risc0/circuit/rv32im-sys/cxx…

Prometheus+Grafana(详细讲解)

Prometheus(普罗米修斯&#xff09;监控系统 1、Prometheus概述 1.1 任务背景 某公司由于业务快速发展&#xff0c;公司要求对现有机器进行业务监控&#xff0c;责成运维部门来实施这个任务。任务要求如下&#xff1a; 部署监控服务器&#xff0c;实现7x24实时监控 针对公司…

4~20mA恒流源 --PLC自控控制

输出部分不接地 1.1&#xff0c; 常规恒流源的方式 用采样电阻 * 电流 控制电压的方式。 负载电阻 * 电流 < 工作电压 1.2&#xff0c;根据运放高阻的特性 Ir Ui/ R, Ir IL, 最大输出电流限制于 RL * Il < Ui. 输出部分接地&#xff0c;工程上更多是用于豪兰德恒流源…

京东高级Java面试真题

今年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验…