Основная проблема
В вашей функции 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 вам все равно нужно учитывать ответ uv_ , относящийся к ascii против двоичной математики.
Вот результат:
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 не будет использоваться пробел.
Важное примечание: Этот код не будет работать на хакерранке, потому что он преобразует 12:15:00 в 24:15:00, а не в 12:15:00.Кроме того, 12:00:00 утра будут преобразованы в 12:00:00 вместо 00:00:00.Больше на Википедии . Онлайн демо о том, как решать эти особые случаи