首页 > 其他分享 >两种方法求字符串个数(函数递归和指针)

两种方法求字符串个数(函数递归和指针)

时间:2023-12-07 12:02:59浏览次数:36  
标签:递归 int strlen 个数 len str my 指针

前言:我先想讲一个关于指针的问题,由于我一开始学习指针的时候很困惑,现在分享给大家。

假设我们定义一个指针p,我们首先要区分p、&p与*p的区别(对于初学者应该和我一开始一样迷茫)

p:p是一个指针变量的名字,表示此指针变量指向的内存地址,如果用%p输出的话它将是一个16进制位的数。

*p:*是解引用操作符,所以*p表示指针指向内存地址中所存放的内容,一般是和指针一样的变量或常量。

&p:&是取地址操作符,所以&p表示取指针p的地址

搞懂这些,我们开始用指针来求字符串个数:

#include<stdio.h>
int my_strlen(char* str)
{
  char* start=str;
  char* end=str;
  while(*end!='\o')
  {
    end++;
  }
  return (end-start);//这一步用到了指针-指针(指针的运算)
}
int main()
{
  char arr[]="abc";
  int len=my_strlen(arr);//模拟一个strlen函数
  printf("len=%d\n",len);
}

注:指针-指针的绝对值=两者之间的元素个数

第二种方法:函数递归

#include<stido.h>
int strlen(char* str)
{
  if(*str!='\0')
  {
    return 1+strlen(str+1);
  }
  else
    return 0;
}
int main()
{
  char arr[]="abc";
  int len=my_strlen(arr);//模拟一个strlen函数
  printf("len=%d\n",len);
}

函数递归 把大事化小

my_strlen("abc");

1+my_strlen("ab");

1+1+my_strlen("c");

1+1+1+my_strlen("\0");

最后总结:任何题目,无论是编程还是其他,每道题的解答都不是唯一的,找到自己感兴趣并熟练掌握才是最重要的,同样,上边这道关于求解字符串长度的题的解答也不是唯一的,小伙伴们可以想一下其他方法并在评论区讨论。
















标签:递归,int,strlen,个数,len,str,my,指针
From: https://blog.51cto.com/u_16351083/8719942

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:统计各位数字都不同的数字个数
    题目给你一个整数n,统计并返回各位数字都不同的数字x的个数,其中0<=x<10n。 示例1:输入:n=2输出:91解释:答案应为除去11、22、33、44、55、66、77、88、99外,在0≤x<100范围内的所有数字。 示例2:输入:n=0代码实现classSolution{publicintcount......
  • c#利用正则表达式获取字符串中汉字的个数
    利用正则表达式获取字符串中汉字的个数stringstr=@"D:\文档\C#BASE\StringBuilder.md";Regexregex=newRegex("^[\u4e00-\u9fa5]{0,}$");intcount=0;for(inti=0;i<str.Length;i++){count=regex.IsMatch(str[i].ToString())?++......
  • STATA fc 比较两个数据集
    使用Stata对双次录人后的数据集进行-致性检查。对两个数据集进行-致性检查的Stata命令为cf(comparefiles),对应的Stata菜单操作方式为Data-.Datautilities-.Comparetwodatasets。Stata是这样描述duplicates命令的:cf命令用来比较主从数据集是否存在某些变量......
  • 打印1-100之间素数及其个数 点赞
    6-1打印1-100之间素数及其个数打印出1-100之间的全部素数及其个数,其中判断一个数是否为素数用函数实现。函数接口定义:intprime(intx)其中x是用户传入的参数,如果x是素数则函数返回1,否则函数返回0。裁判测试程序样例:#include<stdio.h>intprime(intx);intmain()......
  • 做一个数据可视化大屏需要多少预算?其实完全可以不花钱!
    数据可视化大屏成为企业展示数据、决策分析的重要工具。然而,许多人认为制作这样的大屏成本高昂,其实根据我作为数据可视化设计师的经验,你可以达到这一目标却不用花一分钱。首先,你要懂得利用免费工具和资源。在如今丰富的免费工具中,有许多强大的数据可视化工具可供使用,例如Tableau......
  • 字符指针及其函数的使用
    字符指针一、字符指针的有关内容首先需要明确的是,字符串实际就是字符数组。比如说:charp="helloworld";实际上应该是:p={'h','e','l','l','o','','w','o','r','l','d','\0'......
  • 在MySql一个数据源的所有数据库中根据数据表注释查询数据表所属数据库以及表名_根据某
    Selecttable_schema'数据库名',table_name表名,TABLE_COMMENT'表注解'fromINFORMATION_SCHEMA.TABLESWhereTABLE_COMMENTLIKE'%环境监测%';selectTABLE_SCHEMA'数据库名',TABLE_NAME'表名',COLUMN_NAME'列名',CO......
  • 15_完全二叉树的节点个数
    完全二叉树的节点个数给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第h层,则该层包含1~2h个节点。示......
  • 指针(2)指针基本了解及其应用
    <1>指针(1)指针基本概念1)引入:提出问题:如果能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量2)回顾scanf函数功能格式:scanf("%d",&i)深入探讨:scanf()的原型应该是怎样的?我们需要一个参数能保存别的变量的地址,如何表达能够保存地址的变量?......
  • 面试高频:双指针---6题14图一次搞懂
    使用双指针是降低算法复杂度的一个有效途径,有些问题的暴力解法时间复杂度是O(n^2),但使用双指针可以大幅度降低算法复杂度。如果面试者能将求解过程从暴力法优化到双指针,说明面试者的基础知识、代码能力、逻辑思维都是十分扎实的。同贪心算法一样,双指针的难点在于自己想不出、别人......