【问题标题】:How do I convert std::chrono to int如何将 std::chrono 转换为 int
【发布时间】:2021-12-20 11:49:43
【问题描述】:

我一直在尝试制作一个 wpm 计数器,长话短说,我遇到了一个问题: 使用高分辨率时钟后,需要将其除以 12,但无法将std::chrono 转换为int。这是我的代码:

#include <iostream>
#include <chrono>
#include <Windows.h>
#include <synchapi.h>

using namespace std;
using namespace std::chrono;
int main()
{
    typedef std::chrono::high_resolution_clock Time;
    typedef std::chrono::seconds s;

    string text;
    string ctext = "One two three four five six seven eight nine ten eleven twelve";

    cout << "Type: "<< ctext << " in" << "\n" << "5" << endl;
    Sleep(1000);
    cout << "4" << endl;
    Sleep(1000);
    cout << "3" << endl;
    Sleep(1000);
    cout << "2" << endl;
    Sleep(1000);
    cout << "1" << endl;
    Sleep(1000);
    cout << "GO" << endl;

    auto start = Time::now();
    cin >> text;
    auto stop = Time::now();

    float wpm = stop - start / 12;
    
    if (ctext == text)
    {
        cout << "Correct! WPM: " << wpm;
    }
    else
    {
        cout << "You had some errors. Your WPM: " << wpm;
    }
}

是否有任何替代方法我也可以用来为此使用 std::chrono ?

【问题讨论】:

标签: c++ chrono


【解决方案1】:

std::chrono 只需稍作改动即可优雅地解决此问题...

  • 而不是Sleep(1000);,更喜欢this_thread::sleep_for(1s);。您需要标题 &lt;thread&gt; 而不是 &lt;Windows.h&gt;&lt;synchapi.h&gt;

  • cin &gt;&gt; text; 只会读取一个单词。要阅读您想要的整行getline(cin, text);

  • 首先计算存储在浮点类型中的每个单词的分钟数是最简单的。要获得总浮点分钟数,您只需将持续时间除以1.0min。这导致long double。然后将总分钟数除以 12 得到每个单词的分钟数:

.

auto mpw = (stop - start) / 1.0min / 12;
  • 然后只需反转 mpw 即可获得每分钟的字数:

.

float wpm = 1/mpw;

总结:

#include <chrono>
#include <iostream>
#include <thread>

using namespace std;
using namespace std::chrono;

int main()
{
    typedef steady_clock Time;
    typedef seconds s;

    string text;
    string ctext = "One two three four five six seven eight nine ten eleven twelve";

    cout << "Type: "<< ctext << " in" << "\n" << "5" << endl;
    this_thread::sleep_for(1s);
    cout << "4" << endl;
    this_thread::sleep_for(1s);
    cout << "3" << endl;
    this_thread::sleep_for(1s);
    cout << "2" << endl;
    this_thread::sleep_for(1s);
    cout << "1" << endl;
    this_thread::sleep_for(1s);
    cout << "GO" << endl;

    auto start = Time::now();
    getline(cin, text);
    auto stop = Time::now();

    auto mpw = (stop - start) / 1.0min / 12;
    float wpm = 1/mpw;

    if (ctext == text)
    {
        cout << "Correct! WPM: " << wpm << '\n';
    }
    else
    {
        cout << "You had some errors. Your WPM: " << wpm << '\n';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2013-06-28
    相关资源
    最近更新 更多