尝试使用C ++中的递归来确定字符串的长度

时间:2012-12-11 08:40:03

标签: c++ string recursion counting

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

我不知道如何遍历字符串。

6 个答案:

答案 0 :(得分:10)

提示:在递归中使用substr()

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

  1. 它的语法错误;
  2. 它依赖于能够计算字符串的长度(这是你的函数应该做的);
  3. 如果您有另一个基本案例,则没有必要。

答案 1 :(得分:3)

我认为你的例子没有任何意义,你使用已经在计算中返回长度的length。如果我是你的导师,我不会接受这个作为有效的解决方案。

您可能需要使用const char*

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

答案 2 :(得分: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());
}

答案 3 :(得分:1)

也许您想要使用substr

答案 4 :(得分:0)

我知道你想要一个C ++解决方案,但仍然如此。有时C比C ++好。

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

调用count(str.c_str())。

答案 5 :(得分: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));
  }