时间转换为24小时格式cpp

时间:2017-08-10 18:02:49

标签: c++

我坚持使用这个程序,任何人都可以帮助将12小时格式转换为24小时格式吗?

#include <bits/stdc++.h>
using namespace std;

string timeConversion(string s) {
// Complete this function
string d,c;
d=s.substr(8,2);
if(d=="PM"){
int a;
a=stoi(s.substr(0,2));
a=a+12;
c=to_string(a);
}
s[0]=c[0];
s[1]=c[1];
s=s.substr(0,8);
return s;
}
int main() {
string s;
cin >> s;
string result = timeConversion(s);
cout << result << endl;
return 0;
}

Sample Input: 7:05:45PM

Sample Output: 19:05:45

现在我编辑了我的代码并且它正在运行,但是你能告诉我更好的方法来执行这段代码吗?

2 个答案:

答案 0 :(得分:0)

有更好的方法可以做到这一点,但我将使用您制作的代码。

注意:我删除了#include <bits/stdc++.h>

#include <iostream>
#include <stdlib.h>

using namespace std;

string timeConversion(string s) 
{
    string a = s.substr(0,2); //hours
    string b = s.substr(3,2); //minutes
    string c = s.substr(6,2); //seconds
    string d = s.substr(8,2); //AM or PM
    int hours = atoi(a.c_str());
    if (d == "PM")
        hours += 12; //If it is PM just add 12 hours to the time

    string temp;
    if (hours == 0)
       temp = "00";
    else 
       temp = to_string(hours);        
    temp += ":" + b + ":" + c; //concat the strings

    return temp ;
}

int main() 
{
    string s;
    cin >> s;
    string result = timeConversion(s);
    cout << result << endl;
    return 0;
}

答案 1 :(得分:0)

我想这是最初学友好的c ++方式。

#include<sstream>
#include<iostream>
#include<iomanip>
#include<string>

using namespace std;

string timeConversion(string s) {
        istringstream is(s);
        int hours;
        int minutes;
        int seconds;
        string ampm;
        char colon;
        is >> hours >> colon >> minutes >> colon >> seconds >> ampm;
        if(is.fail()) {
                return "Error: wrong format";
        }
        ostringstream os;
        if(ampm == "PM") {
                hours += 12;
        }
        os 
        << setfill('0') << setw(2)
        << hours << ':' 
        << setfill('0') << setw(2)
        << minutes << ':' 
        << setfill('0') << setw(2)
        << seconds;
        return os.str();
}

int main() {
        string s = "7:05:05PM";
        cout << timeConversion(s) << '\n';
        return 0;
}

注意:

  • istringstreamostringstreamcincout类似,但对字符串而不是输入/输出进行操作。

  • << setfill('0') << setw(2) - &gt;如果任何小时分钟或秒只有一位数,则此部分使其打印07而不是7

  • 我没有处理有效的边缘情况,如12:00:01 PM或12:00:01 AM。

  • 我还没有完成错误条件,输入格式正确,但数据错误,例如分钟不应超过60。

我认为你可以改善那些情况。