一直在尝试在 c++ 中将 12 小时制格式转换为 24 小时制格式
Have been trying to convert 12-hour clock format into 24-hour clock format in c++
输入格式为:hh:mm:ssAM 或 hh:mm:ssPM
例:
输入:下午07:05:45
输出: 19:05:45
#include <bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;
int main()
{
int hh,mm,ss ;
char tz[2];
cin>>hh>>mm>>ss>>tz;
if(strcmp(tz,"AM")==0 && hh==12)
{
hh=0;
}
else if(strcmp(tz,"PM")==0 && hh!=12)
{
hh += 12;
}
cout<<hh<<":"<<mm<<":"<<ss;
return 0;
}
与预期的输出不同,即 19:05:45,我得到 7:0:0
您的语句cin>>hh>>mm>>ss>>tz;
不考虑输入中的冒号。这是一个例子,说明大致正确的代码实际上根本没有用。你必须获得完全正确的代码。你不能只是写一些大致正确的东西,并希望计算机能理解你的意思。
您在声明tz
的方式中也有错误。请记住,对于 C 样式字符串,您必须为 NUL 终止符留出空间。所以你需要一个比字符串的最大长度更大的数组,即char tz[3];
.
另一个问题是标题。strcmp
的正确标头是#include <cstring>
(<string>
标头用于您不使用C++字符串),<bits/stdc++.h>
不是标准的C++标头,您应该摆脱使用它的习惯。
这是我可以做到这一点的方法
int hh, mm, ss;
char dummy1, dummy2, tz[3];
cin >> hh >> dummy1 >> mm >> dummy2 >> ss >> tz;
虚拟变量的目的是读取冒号。你对冒号不感兴趣,但你不能忽略它们。
此代码不检查输入中的错误,这在实际程序中将是一个严重的问题。但也许对于一个无关紧要的教程程序。
在这里仔细查看您的输入。
输入07:00:05PM,
在这里经过小时,分钟,有一个冒号,但您在输入过程中没有考虑它。因此,请在一小时和分钟后输入冒号。
例如:
char tz[3],colon;
cin>>hh>>colon>>mm>>colon>>ss>>tz;
完整代码将是:
#include <bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;
int main()
{
int hh,mm,ss ;
char tz[3],colon;
cin>>hh>>colon>>mm>>colon>>ss>>tz;
if(strcmp(tz,"AM")==0 && hh==12)
{
hh=0;
}
else if(strcmp(tz,"PM")==0 && hh!=12)
{
hh += 12;
}
cout<<hh<<":"<<mm<<":"<<ss;
return 0;
}
如果您的格式是固定的,那么就地修改字符串呢?
if (time[8] == 'P') {
if (time[1] < '8') {
time[1]+= 2; time[0]+= 1; // No carry
}
else {
time[1]-= 8; time[0]+= 2; // Carry
}
}
(这假定 ANSI 整理序列。它的效率提高了一百万倍。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 为什么在读取文件大小时文件IO速度会发生变化
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 时间转换为 24 小时格式 cpp
- 一直在尝试在 c++ 中将 12 小时制格式转换为 24 小时制格式
- 使用提升解析日期时间字符串:采用个位数小时格式
- 比较12小时格式时间
- 将几秒钟转换为几天,小时,分钟,秒格式(C )
- 以 24 小时格式比较 C/C++ 中的小时数
- 两个时间之间经过的时间,格式为24小时hh:mm:ss
- Boost Timer 24小时格式