На данный момент я получил этот простой код C, чтобы преобразовать дни, минуты и секунды только секунды:C - Преобразование подстроки в целое
EDITED (я понял проблему с atoi, как это исправляется право ?):.
#include <stdio.h>
#include <stdlib.h>
int getseconds(char * time)
{
int seconds=0, i=0;
char buffer[3];
while (*time != '\0')
{
switch (*time)
{
case 'h': buffer[i]='\0';i=0;seconds=seconds+atoi(buffer)*3600;break;
case 'm': buffer[i]='\0';i=0;seconds=seconds+atoi(buffer)*60;break;
case 's': buffer[i]='\0';i=0;seconds=seconds+atoi(buffer);break;
case ' ':break;
default: buffer[i]=*time;i++;break;
}
time++;
}
return seconds;
}
int main()
{
char *time = "12h 4m 58s";
int seconds = getseconds(time);
printf("%d",seconds);
return 0;
}
Это работает, как я хочу, но нет другого способа сделать это, не создавая больше переменных (например, C#, где я просто нужно преобразовать «инлайн» есть ли C только функции которые преобразуются в переменные, а не в «inline»)?
C# Пример:
string time = "12h 34m 58s";
int seconds = int.Parse(time.Substring(0, 2)) * 3600 + int.Parse(time.Substring(4, 2)) * 60 + int.Parse(time.Substring(8, 2));
Вы можете определить количество линий разницы я думаю :).
Перечитайте вопрос и удален. – andrewdleach
Несвязанное примечание; 'buffer' не содержит строку в этом коде (строка представляет собой последовательность символов, за которой следует' \ 0'); если мусор после того, как он окажется цифрой, то atoi не вернет то, что вы ожидаете. – immibis
Буфер @immibis - это просто «держатель», так как конкретная «строка» имеет только 2 числа, и я не буду выводить его, мне действительно нужно завершить его с помощью \ 0? – Exprove