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.
}

文字列をトラバースする方法がわかりません。

4

6 に答える 6

10

ヒント:substr()再帰で使用します。

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

  1. 構文エラーがあります。
  2. 文字列の長さを計算できることに依存しています(これは、関数が行うべきことです)。
  3. 他の基本ケースがある場合は不要です。
于 2012-12-11T08:41:30.630 に答える
3

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

おそらく使用する必要がありますconst char*

int count(const char* s){
    if(*s == '\0')
      return 0;
    return 1 + count(s + 1);
}
于 2012-12-11T08:51:32.930 に答える
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());
}
于 2012-12-11T08:42:44.610 に答える
1

多分あなたは使いたいと思うでしょうsubstr

于 2012-12-11T08:43:38.787 に答える
0

私はあなたがC++ソリューションを望んでいることを知っていますが、それでも。CがC++よりも優れている場合があります。

int count(const char * s)
{{
  if(* s == 0)
    0を返します。
  それ以外の場合は1+count(++ s);を返します。
};

count(str.c_str())として呼び出します。

于 2012-12-11T09:00:07.973 に答える
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));
  }
于 2013-10-03T12:39:45.810 に答える