私はpalidromesの再帰関数を記述しようとしています。私はコマンド引数が入力されていないときに文字列をテストするときに正しい答えを得ます。コマンド引数があるとき。それは真実であったとしても偽を返し続けます。私は間違って何をしたのですか?再帰的なパリドローム
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool palindrome(string word);
string formatString(string s);
int main(int argc , char * argv[])
{
if(argc < 2)
{
string inputString;
int last = inputString.length()-1;
cout << "Welcome To My Palidrome Tester!" << endl;
cout << "Please Enter A String To Test if it is A Palidrome: ";
getline(cin, inputString);
//testForPalindrome(inputString);
string newW = formatString(inputString);
//cout << "It is a palindrome" ? (palindrome(newW) == true) : "It is Not a palidrome";
if(palindrome(newW) == true)
cout << "It is a palindrome" << endl;
else
cout << "It is not palindrome" << endl;
}
else
{
string commandStr;
for(int i = 1; i < argc; i++)
{
commandStr += argv[i];
}
string newW = formatString(commandStr);
if(palindrome(newW) == true)
cout << "It is a palindrome" << endl;
else
cout << "It is not palindrome" << endl;
}
return 0;
}
bool palindrome(string word)
{
int length = word.length();
string first = word.substr(0,1);
string last = word.substr((length - 1), 1);
if (first == last)
{
word = word.substr((0 + 1), (length - 2));
if (word.length() <= 1) return true; // Problem line?
palindrome(word);
}
else
return false;
}
string formatString(string s)
{
string p;
size_t position = s.find(' ', 0);
while(position != string::npos)
{
s.erase(position,1);
size_t newPosition = position+1;
position = s.find(' ', newPosition);
}
for(int i = 0; i < s.size(); i++)
{
if(ispunct(s[i]))
{
s.erase(i,1);
}
if(isupper(s[i]))
{
s = tolower(s[i]);
}
}
return s;
}
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –