Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Time Conversion C++: Given a time in -hour AM/PM format, convert it to military

ID: 3902510 • Letter: T

Question

Time Conversion C++: Given a time in -hour AM/PM format, convert it to military (24-hour) time.

Note: Midnight is 12:00:00AM on a 12-hour clock, and 00:00:00 on a 24-hour clock. Noon is 12:00:00PM on a 12-hour clock, and 12:00:00 on a 24-hour clock.

Input Format

A single string  containing a time in -hour clock format (i.e.:  or ), where  and .

Output Format

Convert and print the given time in -hour format, where .

Sample Input

Sample Output

Note: Midnight is 12:00:00AM on a 12-hour clock, and 00:00:00 on a 24-hour clock. Noon is 12:00:00PM on a 12-hour clock, and 12:00:00 on a 24-hour clock.

Input Format

A single string  containing a time in -hour clock format (i.e.:  or ), where  and .

Output Format

Convert and print the given time in -hour format, where .

Sample Input

Sample Output

Explanation::

Code in C++ is given below.

Please read all the comments for better understanding of the code.

Screenshots of the output are provided at the end of the code.

Code in C++::

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

string timeConversion(string s){
/**
* Following two strings are declared named d and c respectively.
* String c will be storing the converted format time and we will return
* c as the answer.
*/
string d,c="";

/**
* String d stores "PM" or "AM"
*/
d=s.substr(8,2);

/**
* An integer named hr is declared below and it stores
* the hh part of string hh:mm:ssPM in integer format.
*/
int hr=atoi(s.substr(0,2).c_str());

if(hr==12 && d=="AM"){
/**
* Now suppose hr is 12 and its AM then we know that it's
* midnight and so hr must be 0.
*/
hr=0;
}
if(d=="PM" && hr!=12){
/**
* Suppose d is "PM" and hr is not 12 then we add 12 into hr.
*/
hr+=12;
}
if(hr<10){
/**
* Now suppose hr is less then 10 then we know that in final answer
* if hr is 7 then we need "07".
* So if hr < 10 then we add extra 0 at start of c string.
*/
c+="0";
}

/**
* Now we convert hr back to string using stringstream.
* A variable named hour is declared and we convert hr to string as follows.
*/
stringstream hour;
hour<<hr;
/**
* Finally we update the c string as required and return it at the end.
*/
c=c+hour.str()+s.substr(2,6);
return c;


}
int main(){
/**
* A string named s is declared and using cin we scan the string.
*/
string s;
cin>>s;
/**
* Below we call the function and pass string s as parameter.
* Whatever function returns, it is printed.
*/
cout<<timeConversion(s)<<endl;
return 0;
}

OUTPUT::

Test Case 1::

Could you please give another example of the atoi method? Also, please explain the following line of source code:

int hr=atoi(s.substr(0,2).c_str());

What is c_str()?

Is there a simpler way to convert the int variable hr to a string type? Why use stringstream in the first place?

stringstream hour;
hour<<hr;

Why do we need to type .str after the variable name "hour"? Does s.substr(2,6) "capture" or gets the 2nd to the 6th element of the string s? Why did the string s get shorter? Initially, the string has a length of 10 elements and now the string s is only needed from the 2nd element to the 8th element? What happened to "AM" or "PM"?

c=c+hour.str()+s.substr(2,6);

CACheggClock.exe 07:05:45PM 19:05:45 Process returned ? (0x0) execution time : 28.842 s Press any key to continue.

Explanation / Answer

Could you please give another example of the atoi method? Also, please explain the following line of source code:

int hr=atoi(s.substr(0,2).c_str());

What is c_str()?

Answer:

atoi() function is used to convert a C-String (i.e char *s) to an int. So I can use

char s[] = "123";

int num = atoi(s);

substr() is function whose first parameter is the index from where to get substring, and the 2nd parameter is the no. of characters to extract

In the code, s.substr(0,2) returns a substring starting at index 0 and of length 2, ie. c++ string containing 0th and 1st character

The value returned is a c++ string object and not C-String (char *). So you can't use atoi() on c++ string class. To get C-String from c++ string object, we use s.c_str(). The function c_str() is available in the string class and return char* equivalent. This can be used in places where ever char* is needed.

So for ex:

string s = "12";

int num = atoi(s.c_str());

c_str() stands for C-String( i.e. char*). So we get the C-String from c++ string object and convert it to int using atoi() function.

=========================

Is there a simpler way to convert the int variable hr to a string type? Why use stringstream in the first place?

stringstream hour;

hour<<hr;

Yes there is also an alternate way using to_string() function. You can use the following code instead...

c= c+ to_string(hr) + s.substr(2,6);

return c;

to_string() can be used on any basic data types in c++... like float, double, int etc... It converts it to c++ string object

================

Does s.substr(2,6) "capture" or gets the 2nd to the 6th element of the string s? Why did the string s get shorter? Initially, the string has a length of 10 elements and now the string s is only needed from the 2nd element to the 8th element? What happened to "AM" or "PM"?

s.substr(2, 6 ) means get me the substring starting at index 2 , get me only 6 characters starting at index 2.

The logic implemented in the code is that to convert from AM/PM format to 24hr format, only the hours part need to be converted , rest of the minutes:seconds will remain same, but without AM/PM . So essentially the code first extracts the hour and does the convertion to 24 hr format. and using s.substr(2, 6) , gets the rest of the characters excluding AM/PM.

If the input is 07:05:45PM then s.substr(2, 6) will get ":05:45" i.e starting from index 2, a substring of lenght 6. So it excludes the AM/PM, since we don't want that to be in 24-hr format

I hope the answers helped you.

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote