在尝试查找以字符串形式给出的两个日期之间的天数时,我收到了错误的访问错误。我发现我的功能找到的最大天数是1884,但我不知道为什么。错误的访问错误发生在a.find(" /")函数调用中。
这是代码。任何帮助将不胜感激,谢谢。
int daysBetweenDates(string a, string b) {
if (a == b) {
return 0;
}
cout << a << endl;
int month = stoi(a.substr(0, a.find("/")));
a = a.substr(a.find("/")+1);
int day = stoi(a.substr(0, a.find("/")));
a = a.substr(a.find("/")+1);
int year = stoi(a);
int k = 0; // days in the month;
if (month == 2) {
k = year%4==0 ? 29 : 28;
}
else if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
k = 30;
}
else {
k = 31;
}
day++;
if (day > k) {
month++;
day = 1;
}
if (month > 12) {
year++;
month = 1;
}
string new_a = to_string(month) + "/" + to_string(day) + "/" + to_string(year);
return 1 + daysBetweenDates(new_a, b);
}
答案 0 :(得分:0)
递归调用最终导致堆栈溢出。更改代码以删除可能深度嵌套的调用。例如,通过更改例程来使用循环。 C ++编译器通常不进行尾递归优化。