Как преобразовать строку времени (M: SS) в плавающее - PullRequest
1 голос
/ 30 января 2020

Так что у меня возникли проблемы с выяснением, как преобразовать это время: 4: 27.47

в число с плавающей запятой в секундах.

Если вам нужно больше детали, не стесняйтесь спрашивать.

Любая помощь будет принята с благодарностью! Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 30 января 2020
#include<string>
#include<iostream>
int main(){
    std::string str{ "4:27.47"};//The given string
    float secs {std::stof(str) * 60+std::stof(str.substr(2))};//Your float seconds
    std::cout<<secs;//Display answer
}

При следующем редактировании код работает и в формате (MM: SS)

#include<string>
#include<iostream>
int main(){

    size_t pos{};//To get the position of ":"
    std::string str{ "4:27.47"};//The given string
    float secs {std::stof(str, &pos) * 60+std::stof(str.substr(pos+1))};//Your float seconds
    std::cout<<secs;//Display answer
}
1 голос
/ 30 января 2020
#include<stdio.h>
int main()
{
    double minute, second;
    scanf("%lf : %lf", &minute, &second);
    printf("%f\n", minute * 60 + second);
}
0 голосов
/ 31 января 2020

Немного подробное решение, но оно работает, когда даются часы или нет:

(ЧЧ: ММ: СС.Милли) || (ММ: СС.Милли) || (СС.Милли) || (.Милли)

double parse_text_minutes_to_double(std::string original)
{
    std::vector<std::string> hms;
    std::size_t pos;
    while(std::count(original.begin(), original.end(), ':') )
    {
        pos  = original.find(':');
        hms.push_back(original.substr(0, pos));
        original = original.substr(pos+1);
    }

    int minutes_hours{};
    double sec_and_milli = std::stof(original);
    int iteration_count{};
    while (!hms.empty())
    {
        ++iteration_count;
        int seconds_iteration = std::stoi(hms.back()) * std::pow(60, iteration_count);
        hms.pop_back();
        minutes_hours += seconds_iteration;
    }
    return minutes_hours + sec_and_milli;
}

int main()
{
    std::string original("1:1:20.465");
    double result = parse_text_minutes_to_double(original);

    std::cout << result << std::endl;
}
0 голосов
/ 30 января 2020

Вы можете разделить строку двоеточием (:), а затем преобразовать строку в число с плавающей точкой и рассчитать общее количество секунд следующим образом

#include <iostream>
#include <cstdlib> 

using namespace std;

int main(){

    string time = "4:27.47";
    string minutes = "";
    string seconds = "";
    string temp = "";
    float m, s;

    for(int i=0; i<time.length(); i++){
        if(time[i]==':'){
            minutes = temp;
            temp = "";
        }
        else
            temp += time[i];
        if(i==time.length()-1)
            seconds = temp;
    }

    // casting string to float
    m = atof(minutes.c_str());
    s = atof(seconds.c_str());

    float total = m*60 + s;
    cout << total;

    return 0;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...