#c #string #recursion
#c #строка #рекурсия
Вопрос:
Я не уверен, как бы я удалил один символ в своей строке, потому что, когда я использую str.erase(x,y), насколько я понимаю, это приведет к удалению всего от «x» до «y». Однако я просто хочу удалить один символ в «x».
Мне также нужно использовать рекурсию для этой проблемы.
Мне нужно удалить случайный символ из строки и вывести его и продолжать делать это, пока строка не станет пустой.
string ObliterateString(string arg)
{
int length = arg.length();
int random = 0;
while(length > 0)
{
if(length <= 1)
{
return ObliterateString("");
}
else{
random = rand() % length; //Get a random number that is between 0 and the length of the string
arg.erase(random,random);
cout << arg << endl;
}
length--;
}
return arg;
}
Комментарии:
1. Чтобы ответить на мой первый вопрос, arg.erase(random,1) действительно работает. Спасибо.
Ответ №1:
Рекурсивная процедура должна обрабатываться без цикла while: попробуйте это:
string ObliterateString(string arg)
{
int length = arg.length();
if (length <= 1)
{
return "";
}
else
{
int random;
random = rand() % length;
arg.erase(random, 1);
cout << arg << endl;
arg = ObliterateString(arg);
}
return arg;
}
Ответ №2:
void ObliterateString(string arg) {
if (arg.empty())
return;
random = rand() % arg.length(); //Get a random number that is between 0 and the length of the string
arg.erase(random, 1);
cout << arg << endl;
ObliterateString(arg);
}