逆文字列関数を変更して再帰を追加します。残念ながら、私のプログラムは爆発し続けています。
Visual Studio でコードを実行すると、何らかの理由でウォッチ ウィンドウに i が文字列の長さに等しいと表示されます (つまり、while ループを終了するための終了条件)。最後にもう 1 度踏み込むと、文字列の長さよりも 1 つ小さいと表示されます。その後、永久に while ループにとどまります。
これは紛らわしいと思うので、例を挙げます。「Spongebob」と入力すると、必要なことはすべて実行されます (つまり、Spongebob の長さが 9 であると表示され、「bobegnopS」と出力され、文字列の長さに i がインクリメントされるなど)、その後、i が現在 8 であると表示されます (つまり、ちょうど 9) であり、while ループを終了することはありません。
ここに私の ReverseString() 関数があります:
void ReverseString(char * string, bool stringReversed, int stringLength, int i)
{
i++;
if(!stringReversed)
{
while(*string != '\0')
string++;
}
stringReversed = true;
while(i < stringLength)
{
string--;
std::cout << *string;
ReverseString(string, stringReversed, stringLength, i);
}
}
呼び出しは次のとおりです。
case 3:
//Learn By Doing 16.6
{
char string[BUFFER_LENGTH];
bool stringReversed = false;
int base = 0;
int exponent = 0;
std::cout << "\nEnter base: " << std::endl;
std::cin >> base;
std::cout << "\nEnter exponent: " << std::endl;
std::cin >> exponent;
//Print pow
NewLine();
std::cout << base << " to the " << exponent << " is " << pow(base, exponent);
//Reverse string using recursion
std::cout << "\nEnter string: " << std::endl;
std::cin >> string;
NewLine();
int stringLength = strlen(string);
int i = 0;
ReverseString(string, stringReversed, stringLength, i);
}