Попытка определить длину строки с помощью рекурсии в переполнении стека

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

Решение

Подсказка: используйте substr() в вашей рекурсии.

Также у вас есть два базовых случая. У одного из них есть три вопроса:

  1. в нем есть синтаксическая ошибка;
  2. он полагается на возможность вычислить длину строки (что и должна делать ваша функция);
  3. это не нужно, учитывая, что у вас есть другой базовый случай.
10

Другие решения

Я не думаю, что ваш пример имеет какой-либо смысл, вы используете length который уже возвращает длину в вашем расчете. Если бы я был вашим наставником, я бы не принял это как правильное решение.

Вам, вероятно, нужно использовать const char*

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

Может быть, вы хотели бы использовать substr,

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

Я знаю, что вы хотите решение C ++, но все же. Иногда C лучше, чем C ++.

int count (const char * s)
{
если (* s == 0)
вернуть 0;
иначе вернуть 1 + количество (++ с);
};

Вызов как счетчик (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));
}
0
По вопросам рекламы [email protected]