0

再帰を使用する課題に取り組んでいます。私はまだ再帰を理解するのに少し苦労していますが、少なくともそれがどのように機能するかはわかりません。

私の課題には 2 つの部分がありますが、今のところ、最初の部分について少しだけ助けが必要です。これが私がしなければならないことです:

C 文字列内で > 文字が最初に出現した位置を返す再帰関数を作成します。

これは私がこれまでに持っているものです...

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int test(string s, char x);

int main ()
{
  test("lets test for the letter s", "s" );
}

int test(string s, char x)
{
if(s.length() == 0)
    return 0;
else if (s[0] == x)
    return 1 + test(s.substr(1, s.length()), x);
else
    return test(s.substr(1, s.length()), x);
}

だから私はこれがうまくいくはずだと思うが、関数に何かをテストさせる方法について少し混乱している. メインの関数呼び出しで文字列部分が正しく行われていると確信していますが、値を受け入れるための文字を取得できません。私の理解では、スキャンしたいテキストを入力してから、探したい文字を入力する必要があります。誰かが私が間違っていることを教えてもらえますか、それとも再帰関数に近づいていますか?

4

3 に答える 3

2

次のようなことを行う必要があります。

int main ()
{
   test("lets test for the letter s", 's'); 
                                   //should pass char constant 
                                 //not string literal for second parameter
}

int test(string s, char x)
{
   if(s.length() == 0)
      return 0;
   else if (s[0] == x)
      return 1 + test(s.substr(1, s.length()-1), x); 
                                //^^^second parameter of substring is length
   else
      return test(s.substr(1, s.length()), x);
}
于 2013-04-08T19:24:34.410 に答える
0

"s" は char 配列または文字列として扱われます。単一の文字を表すには、「s」を使用する必要があります

int main ()
{
  cout << "location  = " << test("lets test for the letter s", 's' );
                                                               ^^^^
}
于 2013-04-08T19:24:49.880 に答える