c语言求字符串长度的三种方法(部分略微优化)
求字符串的长度,很多人都会直接想到用strlen函数,只需要头文件string.h就可以很轻松的实现,但对于我们c语言的初学者,也应该尝试用其他方法来进行实现,除了strlen函数外有三种方法可供参考。
1.strlen
#include <stdio.h>
#include <string.h>
int main()
{char arr[100]={0};gets(arr);int len = strlen(arr);printf("%d\n", len);return 0;
}
注意头文件string.h即可。
2.计数器方法
int my_strlen(char* str)
{int count = 0;while (*str != '\0'){count++;str++;}return count;
}int main()
{char arr[100];gets(arr);int len = my_strlen(arr);printf("%d\n", len);return 0;
}
分析:首先输入字符串,定义指针变量指向首元素地址,'\0'是字符串结束标志,只要指向的数组元素不等于‘0’,就指向下一个数组元素,同时count++,两个变量一个访问元素一个计数,我们还可以进行略微的优化。
优化:
#include <stdio.h>
#include <assert.h>//断言的头文件
int my_strlen(const char* str)//const使*str不再改变
{int count = 0;assert(str != NULL);//断言保证指针的有效性while (*str != '\0'){count++;str++;}return count;
}int main()
{char arr[100];gets(arr);int len = my_strlen(arr);printf("%d\n", len);return 0;
}
分析:第一点修改在定义指针变量时我们可以在char前添加一个const,const声明变量后这个变量就不能再改变,const添加有两个位置,一是char* const str,也就是指针常量,二是const char* str,也就是常量指针,这两种效果是截然不同的,第一种是const修饰str,指针常量指向的地址不能改变,但是地址中的数值是可以改变的,可以通过其他指向该地址的指针来改变 ,第二种是修饰*str,不能通过这个指针改变变量的值。指针指向的值不能改变,但指针本身可以是可以改变指向其他地址的,这里不过多讨论。因为我们要求字符串的长度,因此肯定不希望字符串的值被改变,所以可以定义常量指针来实现。第二点修改可以添加一个断言,他的作用是若为真无事发生,若为假则报错,可以保证指针的有效性。
3.指针方法
int my_strlen(const char* str)
{char* temp = str;assert(str != NULL);//断言保证指针的有效性while (*str != '\0'){str++;}return str-temp;
}int main()
{char arr[100];gets(arr);int len = my_strlen(arr);printf("%d\n", len);return 0;
}
分析:定义常量指针指向数组arr,此时str指向arr首元素地址,同时定义指针temp也指向arr首元素地址,此时令str逐个访问arr中的元素直到遇到‘\0’结束,两个地址相减得到的即为中间元素个数。
4.函数递归方法
#include <stdio.h>
int my_strlen(const char* str)
{assert(str != NULL);if (*str != '\0')return 1 + my_strlen(str + 1);elsereturn 0;
}int main()
{char arr[100];gets(arr);int len = my_strlen(arr);printf("%d\n", len);return 0;
}
分析:依旧是定义常量指针,在定义的函数中如果*str不等于‘\0’,就执行return 1 + my_strlen(str + 1),第一次执行后返回1,同时继续调用my_strlen函数,令str指向第二个元素,倘若第二个元素依旧不等于'\0',就返回1,指向第三个元素,继续调用函数,直到指向下一个元素为'\0'时终止。
c语言求字符串长度的三种方法(部分略微优化)相关推荐
- 求字符串长度的三种方法(C语言)
如何求字符串的长度? 首先要明白字符串存储的原理. 字符串存储时,是以'\0'结尾,这个就可以作为判断字符串结尾的一个条件. 接下来,只要有字符串的首元素地址,就可以解决求字符串长度的问题啦! 第一种 ...
- 【c语言】模拟strlen函数求字符串长度的三种方法
1.借助中间变量(常规方法) #include<stdio.h> int my_strlen(char* str)//接收了数组首元素的地址 {int count = 0;while (* ...
- C语言-求字符串长度的几种方法
1.使用库函数<string.h> #include <stdio.h> #include <string.h> int main() {char arr[] = ...
- c语言数组最大可定义多少位_C语言求数组的最大值三种方法
/* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...
- 求字符串长度【三种解题思路】
文章目录 一.递归法 二.指针减指针法 三.计数器法 题目:模拟实现一个strlen函数,也就是求字符串长度的函数. 一.递归法 #include<stdio.h> #include& ...
- 计算字符串长度的三种方法(库函数 指针 )【详解】
目录 求字符串长度的一般原理 方法一:strlen函数 函数原型 使用方法 方法二:指针+整数 方法三:指针-指针 总结: 求字符串长度的一般原理 求字符串长度简单来说就是计算一个字符串(字符数组)中 ...
- C语言求最大公约数的三种方法
最大公约数是两个数可以同时整除的数中最大的那个 这里用三种方法来解决 穷举法求最大公约数 判断x和y的最大公约数,x和y其中一定有一个相对较小的数,然后从这个较小数开始遍历,不断地用x和y去除这个数, ...
- C++求字符串长度的两种方法
针对于string类型的,可以采用strlen 针对于wstring类型的,可以采用_tcslen方法 实例代码: //字符串测试Unicode和ansi void strControl() {std ...
- C++ 获取string字符串长度的三种方法
1.用string的成员方法length()获取字符串长度 length()比较直观,表示的就是该字符串的长度. #include <string> #include <iostre ...
最新文章
- Isometric Game 及译法漫谈
- pytorch 激活函数
- http协议报文体_HTTP协议详解
- CCF-CSP 201612-2 	工资计算(C++满分代码)
- 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...
- C++一天一个程序(七)
- ubuntu16.04中ROS-Kinetic报错: not find a package configuration file provided by “gazebo_ros_control“
- 动手才能进步(冒泡法示例)
- paip.提高效率---微信 手机app快速开发平台—微网络撬动大市场
- CSS3 动画、变形效果
- 三星note9刷Android9,三星Note9官方韩版安卓9固件rom线刷刷机包:N960NKSU2CSE3
- python下载pyhive包:
- python新闻爬虫_基于Python的网络新闻爬虫与检索
- 游戏本地化翻译有哪些内容需要注意
- 决不放弃--实现人生的目标
- ODI报错/警告/调度异常流程信息
- RHCE linux学习第八天
- Python编程基础:用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输入下一个分数,回答“yes”就继续输入下一个分数,回答“no”就停止输入分数。
- 所有API接口分类,淘宝/天猫API、1688API、拼多多API、京东API、各大电商API接口及测试平台
- 互联网周刊:不痛不痒的信息安全