c++ 时间转换为24小时格式cpp

zaqlnxep  于 2023-03-25  发布在  其他
关注(0)|答案(4)|浏览(236)

我被这个程序卡住了,有人能帮忙把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

现在我已经编辑了我的代码,它正在运行,但你能告诉我更好的方法来做这个代码吗?

ff29svar

ff29svar1#

string timeConversion(string s)
{
   string hour = s.substr(0,2);
   string id = s.substr(8,2);
   int iHour = stoi(hour.c_str());

   if( id == "PM" )
   {
       if( iHour != 12 )
           iHour += 12;

       hour = to_string(iHour);
   }

   if( id == "AM" )
   {
       if( iHour == 12 )
           hour = "00";
       else if( iHour < 10 )
           hour = "0" + to_string(iHour);
       else
           hour = to_string(iHour);
   }

   return hour + s.substr(2,6);
}

这对我很有效,并通过了HackerRank网站上的所有9个测试用例。

kuuvgm7e

kuuvgm7e2#

有更好的方法来做到这一点,但我将使用你的代码。

**注意:**我删除了#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;
}
esbemjvw

esbemjvw3#

我想这是初学者最友好的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;
}

注:

  • istringstreamostringstream类似于cincout,但操作字符串而不是输入/输出。
  • << setfill('0') << setw(2)-〉如果小时、分钟或秒中的任何一个只有一个数字,则此部分将打印07而不是7
  • 我还没有处理有效的边缘情况,如12:00:01 PM或12:00:01 AM。
  • 我也没有做错误的情况下,输入格式是正确的,但数据是错误的,例如分钟不应超过60。

我认为你可以为这些案件做出改进。

qyyhg6bp

qyyhg6bp4#

public void run(String s){

string ntime;
 string h = s.substr(0,2);
 int hh= stoi(h);
 if(s[8] == 'P')
 {

     if(hh != 12 )
     {

           hh = hh + 12;
           ntime = to_string(hh);
     }
     else if (hh == 12)
     {
           ntime = to_string(hh);
     }
 }
 else if(s[8] == 'A')
     {

           if(hh == 12){
           ntime = "00";
      }      
      else
      {
             ntime = s.substr(0,2);
      }

 }
 string military = ntime+":"+s.substr(3,5);
 return military;

}

相关问题