修改我的反向字符串函數以添加遞歸。不幸的是,我的程序一直在爆炸。程序使用遞歸後炸掉
在Visual Studio中遍歷我的代碼,由於某種原因,監視窗口會說我等於字符串的長度(即退出while循環的終止條件)。我最後一次繼續它,它說我現在比字符串長度少了一個。然後它永遠留在while循環中。
我知道這聽起來令人困惑,所以我會舉個例子。我輸入「海綿寶寶」,它做我想要的一切(即說海綿寶寶的長度是9,打印「bobegnopS」,增加我的字符串長度等),但它說我現在是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);
}
你需要在ReverseString函數中的返回點 – billz 2013-02-23 03:57:03
你的意思是我不能讓ReverseString成爲無效的,因爲它是一個遞歸函數?所以我應該使它char * ReverseString使它返回一個字符指針? – MrPickle5 2013-02-23 03:59:13
我不是指返回類型,void函數仍然可以返回; – billz 2013-02-23 04:00:33