我正在用C ++制作一个程序,用户在美国标准时间内输入时间并将其转换为军事时间。主代码的主体执行正常,但问题出现在我的函数体中,以if语句开头。我想知道为什么会这样;我对c ++很新。如果您有问题可以随意询问或需要解释该程序应该做什么,这是我的代码。
#include <iostream>
#include <string>
using namespace std;
void militaryConversion(string am_pmPart_st, string firstPartofTime, string secondPartofTime){
// Converts they obtained strings, but first we must concatenate the two parts into one string
string concatenatedTime;
int militaryTime;
cout << "test1" << endl;
concatenatedTime = firstPartofTime + secondPartofTime;
if(firstPartofTime == "12")
{
cout << "Corresponding military time is: " << concatenatedTime << " hours" << endl;
}
else if(am_pmPart_st == " am")
{
if (concatenatedTime.length() < 4){
cout << "Corresponding military time is: " << concatenatedTime << " hours"<< endl;
}
}
else if(am_pmPart_st == " pm")
{
int castedTime;
castedTime = stoi(concatenatedTime); //This is where we convert the string to int because its the only place it matters
militaryTime = castedTime + 1200;
cout << "Corresponding military time is: " << militaryTime << " hours" << endl;
}
}
int main()
{
char DELEMETER = ':';
char DELEMETER_sp = ' ';
string time, firstPartofTime, secondPartofTime, am_pmPart_st, loweredAM_PM;
cout << "Enter the time in the format of: HH:MM AM/PM ";
getline(cin, time);
firstPartofTime = time.substr(0, time.find(DELEMETER));
cout << "The first digits of time " << firstPartofTime << endl;
secondPartofTime = time.substr(time.find(DELEMETER) + 1, time.find(DELEMETER_sp)-1);
cout << "The second set of digits " << secondPartofTime << endl;
am_pmPart_st = time.substr(time.find(DELEMETER_sp), time.size());
cout << "The am/pm part is:" << am_pmPart_st << endl;
for(int i=0; am_pmPart_st[i]; i++) am_pmPart_st[i] = tolower(am_pmPart_st[i]); //Converts am/pm to lowercase
cout << am_pmPart_st << endl;
militaryConversion(am_pmPart_st, firstPartofTime, secondPartofTime);
}
答案 0 :(得分:0)
首先,你的问题很模糊,因为它确实说明了应该发生的事情。但是,我想我可以看到发生了什么。当您在第一个条件中检查时间的一小部分时,首先检查“12”。但是,你永远不会纠正上午或下午12点。我的建议是检查上午12点(上午12点== 0000点)和下午12点(= 12点1200点)。在上午你将需要检查12并从当时减去1200,在下午你将需要检查12并且不会增加1200时间。
答案 1 :(得分:0)
substr有两个参数。第一个是起始位置,第二个是长度。当您致电secondPartofTime = time.substr(time.find(DELEMETER) + 1, time.find(DELEMETER_sp)-1);
时,您错误地将第二个参数作为结束位置传递,而不是长度。
相反,您可以这样做:
int startPos = time.find(DELEMETER) + 1;
int endPos = time.find(DELEMETER_sp) - 1;
secondPartofTime = time.substr(startPos, endPos - startPos + 1);
理想情况下,您应该检查find的返回值,并在返回npos
时处理这种情况,这样您就不会因无效的用户输入而崩溃。
答案 2 :(得分:0)
不遵循HH:MM AM / PM表格的输入正在产生问题。 (HH:MM(包括冒号)正好5个字符)
您有一个基于if-else
的决策树,其中一个if
没有else
。缺少else
是您的程序没有提供任何输出的原因
string.substr()
有一些问题,正如MFisherKDX所解释