【问题标题】:Strings and Recursion [closed]字符串和递归
【发布时间】:2013-04-06 08:59:20
【问题描述】:

所以我在网上四处寻找,发现有人发布了一些作业问题,我想我想试一试。它处理一个类和一个我不想尝试的称为派生类的东西,(主要是因为我不知道那是什么),但我看到了这些要求,想知道它们是否都可以完成递归,使用类似 void 或 int 函数。这是我得到的:

一个名为 strLength 的方法,它返回字符串的长度。

一个名为 lowerCase 的方法,它返回小写字符的数量。

一个名为 upperCase 的方法,它返回大写字符的数量。

一个名为 vowelCnt 的方法,它返回字符串中元音的数量。

一种称为 charSum 的方法,它返回字符串中所有字符的总和。

我想我可以做到最后一个:

int charSum(string x, int i)
{
  if(x.size() == i)
    return (0 + x[i]);
  else
    return charSum(x, i + 1) + x[i];
}

虽然我不太确定用实际的 char 来做,但是为了练习和看看它是如何使用递归完成的,我不太担心天气它是一个 char 还是一个字符串,只是这样它有效。

检查一下,我找到了这个,(注意,这个不是我想出来的,一个叫 eazar001 的人做了...):

int countString(char sample[], int i, int total)
 {
   if(sample[i] == 0)
   {
       return total;
   }
   else
   {
       return countString(sample, i+1, ++total);
   }
 }

有没有人知道如何处理列表中的其他内容,或者有什么可以指点我的东西,可以告诉我如何扫描字符串以查找这些东西,(尤其是大写和小写的东西,我有不知道有什么不同)。 感谢任何愿意在我尝试自学时带我学习这些东西的人!

【问题讨论】:

  • 您的第二个示例在else 子句中缺少return 语句。你所有的问题都应该遵循几乎相同的模式,唯一的区别是它们在递归过程中积累了什么值。
  • 这类问题不适合 SO。你应该问一个可以有具体答案的问题。寻求一般性建议会导致持续的讨论,而不是答案。
  • 那么我应该分解它们吗?
  • 您应该尝试编写它们中的每一个。如果您对其中一个有疑问,请发布一个问题来说明您的尝试。好吧,既然有人为你完成了所有工作,看起来你不会有机会,而且你也不会学习。
  • 哦,相信我,我正在学习。这不适合上课,我不只是接受一些答案并使用它。我拿走我得到的任何东西,然后把它来回撕开,直到我有足够的信心向别人解释它而无需查找任何东西,并且能够一时兴起。我通常很难阅读我所拥有的书籍,并且看到代码让我更容易理解和学习。这就是为什么我在知道自己可以做到而不必依靠书本来教我之前不会上课的原因,这也是我在网上搜寻此类奇怪问题的原因。

标签: c++ string recursion


【解决方案1】:
int strlen1(char * s){
    if(*s=='\0') return 0;
    else return strlen1(++s)+1;
}
int lowercase_count(char *s){
    if(*s=='\0') return 0;
    else if(*s>=97 && *s<=97+26) return lowercase_count(++s)+1;
    else return lowercase_count(++s);
}
int uppercase_count(char *s){
    if(*s=='\0') return 0;
    else if(*s>=65 && *s<=65+26) return uppercase_count(++s)+1;
    else return uppercase_count(++s);
}
int isVowel(char c){
    char v[10]={'a','e','i','o','u','A','E','I','O','U'};
    int i;
    for(i=0;i<10;i++)
        if(v[i]==c) return 1;
    return 0;
}
int vowel_count(char *s){
    if(*s=='\0') return 0;
    else if(isVowel(*s)) return vowel_count(++s)+1;
    else return vowel_count(++s);
}

【讨论】:

  • 好的,因为我有点困惑如何区分大小写,你能解释一下这两者是如何区分的吗?我猜想某种数字计数与它有关。
  • 至于元音工作,看起来您首先在一个函数中寻找元音,然后在另一个函数中进行递归工作,调用您的元音检查器函数,对吗?
  • 好的。如果你想找到一个字符串的长度,那么你必须遍历每个字符并将答案加 1(return 语句),直到你在字符串的末尾,此时你终止。
  • 因此,要检查 char 是否为小写,您必须检查它是否介于 a(a 的 int 值为 97)和 z(97+26)之间
  • 您不应该对那些 ASCII 字符代码进行硬编码。 C 和 C++ 有内置函数 isupper()islower() 来判断一个字符是大写还是小写。
猜你喜欢
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2021-12-16
  • 2021-12-28
  • 2013-02-05
  • 2021-09-17
  • 2015-02-16
  • 2015-10-25
相关资源
最近更新 更多