12小时到24小时的时间转换
12 hour to 24 hour time conversion
我正试图从hackerlink编写这个c++程序,但在我的输出中,我得到的只是一个空白。
输入字符串的形式为HH:MM;SSpp,其中HH是以零开头的两位数字表示的小时,MM表示分钟,SS为秒,1ppAM或PM。
#include <bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;
string timeConversion(string s)
{
string p;
int i,j;
if(s[8]==80){ // checking if it is AM or PM
int x = s[0]*10 + s[1] +12;
int y = x%10;
int z = x/10;
s[0]= z;
s[1]= y;
for(i=0;i<10;i++){
p[i]=s[i];
}
}
string newt= p.substr(0, p.size()-2); //removing last two characters
return newt;
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
string s;
getline(cin, s);
string result = timeConversion(s);
fout << result << "n";
enter code here
fout.close();
return 0;
}
是否存在逻辑错误?我知道这个问题的另一种方法,但如果有人能帮助我,那就太好了。
问题在于将字符数字(例如s[0]
)视为整数。
如果你确信你在处理数字,那么对字符进行算术运算的方法是减去字符'0'
的值,就像这样:s[0] - '0'
。结果将是整数。
主要问题
在timeConversion()
函数中,您定义了一个字符串p,它由字符串默认构造函数初始化为"。
现在对于AM时间,您可以跳过if
,直接转到string newt= p.substr(0, p.size()-2);
,在空的p
上,它只会创建一个空的newt
字符串。所以您返回一个空值。每次!
对于PM时间,您可以进入if
进行一些转换。不幸的是,p[i]=s[i];
并没有做到你想的那样。事实上,它在空的p
字符串中是越界访问。最后,p的长度仍然是0,这将导致返回一个空值(在最好的情况下)。
解决方案的开始
在构造时初始化p
:
string p=s;
然后,该代码将立即适用于AM字符串。对于PM字符串,您仍然需要考虑与ascii和二进制数学相关的uv_的答案。
这里的结果:
string timeConversion(string s)
{
string p=s;
int i,j;
if(s[8]=='P'){ // checking if it is AM or PM
int x =(s[0]-'0')*10 + (s[1]-'0') +12;
p[0]= x/10 +'0';
p[1]= x%10 +'0';
}
return p.substr(0, p.size()-2); //removing last two characters
}
注意:这假设条目格式始终有效,并且不会使用空格代替前导0。
重要提示:此代码将在hackerbank上失败,因为它将下午12:15:00转换为24:15:00,而不是在12:15:00。此外,12:00:00am将转换为12:00:00,而不是00:00:00。有关维基百科的更多信息。关于如何解决这些特殊情况的在线演示
此代码将在考虑所有测试用例的情况下工作,只是添加了另外两个条件
string timeConversion(string s)
{
string ans=s;
if(ans[8]=='P')
{
int x = (ans[0]-'0')*10+(ans[1]-'0')+12;
//cout<<x;
if(x!=24)
{
ans[0]=x/10+'0';
ans[1]=x%10+'0';
}
}
if(ans[8]=='A')
{
int y=(ans[0]-'0')*10+ans[1]-'0';
if(y==12)
{
ans[0]='0';
ans[1]='0';
}
}
return ans.substr(0, ans.size()-2);
}
- 时间转换为 24 小时格式 cpp
- C++:将Unix时间转换为非本地时区
- 将带有时区的纪元时间转换为Excel格式的时间?
- 如何将纪元时间转换为time_point
- 如何将标准::时间::d转换为双倍(秒)?
- 在 c++ 中将 ISO 日期时间转换为本地日期时间并提取时间
- C 将NTP服务器返回的时间转换为字符串
- 将时间转换为小时、分钟和秒
- 将文本日期和时间转换为 ATL::CTime
- C Winapi:如何将当前时间转换为字符串
- 12小时到24小时的时间转换
- 如何将Milli秒的时间转换为C 中的filtime
- C 将日期时间转换为时间戳
- 将 NTP 时间转换为日期时偏移 1 天
- 时间转换的建议代码
- 将时间转换为分钟和秒
- 如何将存储在字符串变量中的时间转换为时间格式
- 将ISO时间转换为std::chrono::time_point
- 时间转换程序
- 如何将时间转换为纪元时间