[C语言][C++][递归][计算字符串的长度]计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!
温馨提示:这篇文章已超过438天没有更新,请注意相关的内容是否还可用!
一,使用 递归 计算 字符串 的 长度
1,题目描述
2,分析题目
Ⅰ,题目中要求除了函数的形参,函数中不能够使用多余的变量(这是比较苛刻的要求)。
Ⅱ,根据此,很自然的想到需要使用递归来解决问题。
Ⅲ,字符串的结束标志是'\0',因此可以将 读取到'\0' 作为结束条件
3,关于递归的基本知识
Ⅰ,递归包含两个过程:
递推的过程。
回归的过程。
Ⅱ,递归的两个必要条件:
①:必须有限制条件来结束递推,否则会造成死递归,最终导致栈溢出(内存爆满)。
②:随着不断地递推,越来越接近限制条件。
4,解决问题
如图所示:
假设输入 yes
红色部分的是递推的过程
绿色部分的是回归的过程
5,代码解决
在代码中具体分析问题
#define _CRT_SECURE_NO_WARNINGS 1
//写一个函数Strlen,可以求字符串长度,除了函数的形参,函数中不能使用多余的变量。
//输入一个字符串(字符串长度小于等于30,中间不包含空格),使用Strlen函数可以求字符串的长
//度,并返回。
//注:字符串的结束标志是\0,
//思路:
//递归:包含两个过程 1,递推的过程 , 2,回归的过程
//递归包含两个 必要 的条件:
//1,存在一个限制条件可以 使得递归结束,否则就会导致无限递归 ,最终导致 栈区溢出
//2,随着不断的递归 ,越来越接近 限制条件
#include
#include
#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
//写一个函数Strlen,可以求字符串长度,除了函数的形参,函数中不能使用多余的变量。
//输入一个字符串(字符串长度小于等于30,中间不包含空格),使用Strlen函数可以求字符串的长
//度,并返回。
//注:字符串的结束标志是 \0
//思路:
//指针 减 指针
#define LEN 1000
#include
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
//思路:
//1,字符串的结束标志是 '\0';
//2,遍历 所输入的字符串 遇到 '\0' 截至
#include
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,欢迎分享,感谢阅读!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

![[C语言][C++][递归][计算字符串的长度]计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!](https://img-blog.csdnimg.cn/direct/b954c058d55e478494228e8eadd55fc0.png)
![[C语言][C++][递归][计算字符串的长度]计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!](https://img-blog.csdnimg.cn/direct/91a0a6b5a36547efb80386df354ad35d.png)
![[C语言][C++][递归][计算字符串的长度]计算字符串的长度几种方法 | 递归 | 指针减指针 | 计数器 | C语言 | 详解 | 期末考试必看!!!](https://img-blog.csdnimg.cn/direct/30ee709cfb324cd28a3d3658f9224014.png)