2015-11-13 5 views
-5

Этот код предназначен для домашнего задания для моего класса программирования. Я должен ввести время в формате HH: MM AM или HH: PM PM и преобразовать его в военное время.Функция ничего не возвращает

Мой профессор хочет, чтобы мы записали код так, чтобы AM и PM были прочитаны независимо от случая (Am, pM, am, PM все приемлемы). Функция преобразования должна принимать стандартное время как строковый параметр, преобразовывать время в четырехзначный формат военного времени (EX 1:10 AM должно быть 0110 часов, 5:05 вечера должно быть 1705 часов и т. Д.) И верните строку нового военного времени в основную функцию, чтобы основная функция могла записать ее на выходе.

Я больше не получаю никаких ошибок, но кажется, что когда я запускаю программу, ничто не записывает мою переменную mtime. Моя продукция просто «Соответствующее военное время - это часы». Может ли кто-нибудь помочь мне узнать, почему моя функция конверсии не возвращает военные часы?

#include <iostream> 
#include <string> 
#include <cctype> 
using namespace std; 

string to24Hour(string); 

int main() 
{ 
    string stime, mtime; 
    cout << "Enter time: "; 
    getline (cin, stime); 

    mtime = to24Hour(stime); 

    cout << "Corresponding military time is " << mtime << " hours."; 
    return 0; 
} 

string to24Hour(string time) 
{ 
    string hour, minute, period, mtime; 
    int colon, space; 

    colon = time.find(":"); 
    space = time.find(" "); 

    hour = time.substr(0, colon); 
    int ih = stoi(hour); 
    minute = time.substr(colon + 1, space); 
    period = time.substr(space + 1); 
    period = toupper(period[0]) + toupper(period[1]); 

    if (period == "AM") 
    { 
     if (ih = 12) 
      mtime = "00" + minute; 
     else if (ih < 10) 
      mtime = "0" + hour + minute; 
     else 
      mtime = hour + minute; 
     return mtime; 
    } 
    if (period == "PM") 
    { 
     if (ih < 12) 
     { 
      ih = ih + 12; 
      hour = to_string(ih); 
      mtime = hour + minute; 
     } 
     else 
      mtime = "12" + minute; 
     return mtime; 
    } 
} 
+1

Ваш код анализа даты очень хрупкий, вы уверены, что не можете использовать регулярные выражения? – Dai

+4

Также ... ** использовать отладчик! ** – Dai

+2

'if (ih = 12)' => 'if (ih == 12)' –

ответ

0

Обнаружена часть проблемы. Когда я делал эту верхнюю линию с обоими символами, она превращала АМ в АА с акцентом над вторым А. Поскольку это не было AM или PM, ничего не было выполнено. Сейчас все работает!

Вот обновленный код.

#include <iostream> 
#include <string> 
#include <cctype> 
using namespace std; 

string to24Hour(string); 

int main() 
{ 
    string stime, mtime; 
    cout << "Enter time: "; 
    getline (cin, stime); 

    mtime = to24Hour(stime); 

    cout << "Corresponding military time is " << mtime << " hours."; 
    return 0; 
} 

string to24Hour(string time) 
{ 
    string hour, minute, period, mtime; 
    int colon, space; 

    colon = time.find(":"); 
    space = time.find(" ", 4); 

    hour = time.substr(0, colon); 
    int ih = stoi(hour); 
    minute = time.substr(colon + 1, 2); 
    period = time.substr(space + 1); 
    period = toupper(period[0]); 

    if (period == "A") 
    { 
     if (ih < 10) 
      mtime = "0" + hour + minute; 
     else if (ih = 12) 
      mtime = "00" + minute; 
     else 
      mtime = hour + minute; 
     return mtime; 
    } 
    if (period == "P") 
    { 
     if (ih < 12) 
     { 
      ih = ih + 12; 
      hour = to_string(ih); 
      mtime = hour + minute; 
     } 
     else 
      mtime = "12" + minute; 
     return mtime; 
    } 
} 
+0

'else if (ih = 12)' все еще ошибочно, если вы хотите провести сравнение, а не задание. Для сравнения напишите 'else if (ih == 12)'. –

Смежные вопросы