#c #string #recursion #palindrome
#c #строка #рекурсия #палиндром
Вопрос:
Когда я пытаюсь запустить этот код, я получаю противоположный результат. Пожалуйста, дайте мне знать, что я делаю не так…
#includelt;bits/stdc .hgt; using namespace std; bool ps(string s,int l, int r){ if(lgt;=r) return true; if(s[l]!=s[r]) return false; return ps(s, l,--r); } int main(){ string str="naman"; int s=str.size(); bool b=ps(str,0,s); if(!b){ coutlt;lt;"Not a plaindrome"; } else{ coutlt;lt;"A plaindrome"; } return 0; }
Ответ №1:
Вы вводите неверное начальное значение ps
. Линия
bool b=ps(str,0,s);
должно быть
bool b=ps(str,0,s - 1);
поскольку последний символ в строке находится в индексе string.size() - 1
не string.size()
Комментарии:
1. Обратите внимание, что, чтобы понять, в чем была проблема, я добавил инструкцию печати в начало
ps
, чтобы посмотреть, как далеко она зашла (cout lt;lt; "l " lt;lt; l lt;lt; " r lt;lt; r lt;lt; endl
) Добавление подобных инструкций или использование отладчика-это то, как вы можете решить подобные проблемы для себя в будущем.