【问题标题】:Trying to determine length of a string using recursion in C++尝试在 C++ 中使用递归确定字符串的长度
【发布时间】:2012-11-28 18:45:39
【问题描述】:
int count(string s){
    if(s == "")
      return 0;
    if(s.length == 1)
      return 1;
    return 1 + count() //This is what I can't figure out. How to traverse the string.
    //I just need a hint, not a full on answer.
}

我不知道如何遍历字符串。

【问题讨论】:

  • 提示:字符串的大小是 1 + 删除第一个(或最后一个)字符后的字符串大小。空字符串的大小为零。
  • 对我来说听起来像是作业......现在你可能想要在倒数第二行做:return 1 + count(s.substr(0, s.length() - 1));
  • 是的,这是家庭作业。没什么特别的,但它让我很烦。
  • 您确定您需要使用std::stringchar* 吗? if(s.length == 1) 看起来几乎像作弊:)
  • 您使用字符串的length 方法,该方法已经返回大小。这个练习有什么意义?

标签: c++ string recursion counting


【解决方案1】:

提示:在递归中使用substr()

另外,您有两种基本情况。其中之一存在三个问题:

  1. 其中有语法错误;
  2. 它依赖于能够计算字符串的长度(这是您的函数应该做的);
  3. 鉴于您有其他基本情况,因此没有必要。

【讨论】:

  • 我放了两个基本情况,因为他们说如果字符串为空返回 0,然后我把长度的基本情况 == 1 如果它> 0。
  • @user1893303 你可以使用 0 作为你的基本情况。
  • 我删除了 length() == 0 的情况。
  • @user1893303:这完全是错误的做法。如果我用空字符串调用你的函数怎么办?
【解决方案2】:

我认为您的示例没有任何意义,您使用的 length 已经在您的计算中返回长度。如果我是你的导师,我不会接受这是一个有效的解决方案。

你可能需要使用const char*

int count(const char* s){
    if(*s == '\0')
      return 0;
    return 1 + count(s + 1);
}

【讨论】:

  • 你不需要 const char*,甚至不需要char*
  • 问题不在于字符串知道它的长度,而在于 OP 使用它作为基本情况。
  • 从其他示例中我发现它们都使用了字符,但问题的要求是使用字符串数据类型。我知道当你只需要使用 length() 函数时计算递归长度是很愚蠢的,但我认为教授希望我们至少体验一下字符串递归。
  • @irrelephant,如果已经知道std::string 的长度,计算它的意义何在?我猜他的任务听起来像calculate string size recursively,其中string 是c-string,而不是std::string
  • @user1893303,他是明确说std::string 还是只是“字符串数据类型”?后者可能意味着你需要const char*
【解决方案3】:

也许您想使用substr

【讨论】:

  • 工作就像一个魅力。谢谢
【解决方案4】:

如果您的目的是遍历字符串,我建议使用迭代器(请参阅std::string::begin)。

template<typename It>
int count(It const begin, It const end)
{
  return (begin != end ? count(begin + 1, end) + 1 : 0);
}

int count(std::string const& s)
{
  return count(s.begin(), s.end());
}

【讨论】:

  • 如何使用递归?
  • @JanDvorak:如果函数的参数是一个迭代器(连同“end”迭代器),它是递归的。
【解决方案5】:

我知道您想要一个 C++ 解决方案,但仍然如此。有时 C 比 C++ 更好。

整数计数(const char *s) { 如果(*s == 0) 返回0; 否则返回 1 + count(++s); };

调用 count(str.c_str())。

【讨论】:

    【解决方案6】:
      #include<stdio.h>
      main(){
      char str1[100];
      gets(str1);
      int i=0;i=len(str1,i);printf(" \nlength of string is %d",i);
      }
      int len(char s1[],int i) {
      printf("\n%c",s1[i]);
      int sum=0,count =1; 
      if(s1[i] == '\0') return 0;
      else
      return (count += len(s1,++i));
      }
    

    【讨论】:

      猜你喜欢
      • 2022-06-23
      • 2011-08-05
      • 2013-11-15
      • 2014-08-10
      • 2021-01-30
      • 2020-07-04
      • 2012-09-14
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多