求字符串的长度,很多人都会直接想到用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语言求字符串长度的三种方法(部分略微优化)相关推荐

  1. 求字符串长度的三种方法(C语言)

    如何求字符串的长度? 首先要明白字符串存储的原理. 字符串存储时,是以'\0'结尾,这个就可以作为判断字符串结尾的一个条件. 接下来,只要有字符串的首元素地址,就可以解决求字符串长度的问题啦! 第一种 ...

  2. 【c语言】模拟strlen函数求字符串长度的三种方法

    1.借助中间变量(常规方法) #include<stdio.h> int my_strlen(char* str)//接收了数组首元素的地址 {int count = 0;while (* ...

  3. C语言-求字符串长度的几种方法

    1.使用库函数<string.h> #include <stdio.h> #include <string.h> int main() {char arr[] = ...

  4. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

  5. 求字符串长度【三种解题思路】

    文章目录 一.递归法 二.指针减指针法 三.计数器法   题目:模拟实现一个strlen函数,也就是求字符串长度的函数. 一.递归法 #include<stdio.h> #include& ...

  6. 计算字符串长度的三种方法(库函数 指针 )【详解】

    目录 求字符串长度的一般原理 方法一:strlen函数 函数原型 使用方法 方法二:指针+整数 方法三:指针-指针 总结: 求字符串长度的一般原理 求字符串长度简单来说就是计算一个字符串(字符数组)中 ...

  7. C语言求最大公约数的三种方法

    最大公约数是两个数可以同时整除的数中最大的那个 这里用三种方法来解决 穷举法求最大公约数 判断x和y的最大公约数,x和y其中一定有一个相对较小的数,然后从这个较小数开始遍历,不断地用x和y去除这个数, ...

  8. C++求字符串长度的两种方法

    针对于string类型的,可以采用strlen 针对于wstring类型的,可以采用_tcslen方法 实例代码: //字符串测试Unicode和ansi void strControl() {std ...

  9. C++ 获取string字符串长度的三种方法

    1.用string的成员方法length()获取字符串长度 length()比较直观,表示的就是该字符串的长度. #include <string> #include <iostre ...

最新文章

  1. Isometric Game 及译法漫谈
  2. pytorch 激活函数
  3. http协议报文体_HTTP协议详解
  4. CCF-CSP 201612-2 工资计算(C++满分代码)
  5. 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...
  6. C++一天一个程序(七)
  7. ubuntu16.04中ROS-Kinetic报错: not find a package configuration file provided by “gazebo_ros_control“
  8. 动手才能进步(冒泡法示例)
  9. paip.提高效率---微信 手机app快速开发平台—微网络撬动大市场
  10. CSS3 动画、变形效果
  11. 三星note9刷Android9,三星Note9官方韩版安卓9固件rom线刷刷机包:N960NKSU2CSE3
  12. python下载pyhive包:
  13. python新闻爬虫_基于Python的网络新闻爬虫与检索
  14. 游戏本地化翻译有哪些内容需要注意
  15. 决不放弃--实现人生的目标
  16. ODI报错/警告/调度异常流程信息
  17. RHCE linux学习第八天
  18. Python编程基础:用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输入下一个分数,回答“yes”就继续输入下一个分数,回答“no”就停止输入分数。
  19. 所有API接口分类,淘宝/天猫API、1688API、拼多多API、京东API、各大电商API接口及测试平台
  20. 互联网周刊:不痛不痒的信息安全

热门文章

  1. c语言方阵编程,C语言编程蛇形方阵问题
  2. 安卓新出病毒幽灵推,回顾android历史上的那些吸费病毒
  3. 卤菜店用什么收银系统好点
  4. 每天改变一点点: 从现在开始
  5. [数论]上帝与集合的正确用法
  6. 初识Selenium一种自动化工具
  7. 4.9 使用黑白工具制作复古风格照片 [原创Ps教程]
  8. python程序向企业微信机器人发送消息
  9. L70.linux命令每日一练 -- 第十章 Linux网络管理命令 -- nc和ssh
  10. Java中如何对ArrayList对象排序