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()在你的递归中使用。

此外,您有两个基本案例。其中之一有三个问题:

  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++ 更好。

整数计数(const char *s)
{
  如果(*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 回答