2012-12-11 14 views
6
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. 
} 

文字列をトラバースする方法はわかりません。C++で再帰を使用して文字列の長さを調べようとしています

+2

ヒント:文字列のサイズは、1 +最初の(または最後の)文字が削除された文字列のサイズです。空文字列のサイズはゼロです。 – zackg

+0

私は宿題のように聞こえますが、今度は2番目の最後の行で何をしたいのですか?1 + count(s.substr(0、s.length() - 1)); – Nils

+1

ええ、それは宿題です。特別なことはありませんが、それは私をかなり苦しめています。 –

答えて

10

ヒント:再帰でsubstr()を使用してください。

また、2つの基本ケースがあります。そのうちの1つに3つの問題があります:

  1. 構文エラーがあります。
  2. これは、文字列の長さを計算できることに依存しています(これはあなたの関数が行うはずです)。
  3. もう一方のベースケースがある場合は不要です。
+0

私はこのショットを与えるよ、ありがとう! –

+0

2つの基底ケースを置く理由は、文字列が空の場合は0を返し、次に0の場合は長さ== 1の基底ケースを入れます。 –

+1

@ user1893303ベースケースとして0を使用できます。 –

1

文字列をトラバースすることを目的としている場合は、イテレータを使用することをお勧めします(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()); 
} 
+1

どのように再帰を使用しますか? –

+1

@ JanDvorak:関数の引数が( "end"イテレータと一緒に)イテレータであれば、それは再帰的です。 –

1

おそらくsubstrを使用します。

+0

チャームのように働いた。 –

3

私はあなたの事例が意味をなさないとは思っていませんが、あなたの計算ですでに長さを返すlengthを使用します。私があなたの家庭教師だったら、これを有効な解決策として受け入れなかったでしょう。

あなたは、おそらく私はまだあなたがC++ソリューションをしたい知っているが、const char*

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

あなたは 'const char *'を必要とせず、 'char *'もありません。 –

+1

問題は文字列が長さを知っているのではなく、OPが基本文字列として使用するということです。 – irrelephant

+0

他の例から、私はそれらがすべて文字を使用していることがわかりましたが、質問の要件は文字列データ型を使用することでした。再帰の長さを数えられるのは私が知っているのは、length()関数を使用するだけですが、Profが文字列再帰を少なくとも経験すると思っていると思います。 –

0

を使用する必要があります。時にはCがC++より優れていることがあります。

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

カウント(str.c_str())として呼び出します。

0
#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)); 
    }