【问题标题】:Determining Next Steps on "Input from file" Problem确定“从文件输入”问题的后续步骤
【发布时间】:2020-10-26 23:13:36
【问题描述】:

让我先说这个问题是关于编程 1 类实验室的。我不是在找人为我的工作提供一行代码。然而,这是一个在线课程,我有点迷失方向,非常感谢在将概念转换为编码运算符方面的一些指导。

该实验室用于从 .txt 文件中获取单圈时间并对值执行不同的算术运算,例如从第 1 次到第 3 次组织等。我对自己处理实验室想要的数据的能力充满信心。我遇到的问题是如何存储这些数据以便对其进行操作。该文件有 7 名学生,但最多可容纳 20 名。

Results.txt 的格式如下:

Lap 1:  
Akano 1:43  
Wes 1:45  
Kye 1:52  
Edward 2:05  
Jess 2:14  
Ally 2:26  
Wilt 2:30  

Lap 2:  
Edward 1:50  
Akano 2:00  
Wes 2:03  
Kye 2:15  
Jess 2:16  
Ally 2:23  
Wilt 2:54

Lap 3:  
Kye 2:01  
Akano 2:06  
Ally 2:54  
Wes 3:03  
Wilt 3:11  
Jess 3:15  
Edward 3:21  

因此,我的说明的第一部分是:

“目标一:输出所有学生的最终成绩。我也想知道总成绩第一、第二、第三的是谁。(不过如果你把它们都排好就足够了)。”

我已经开发了一些初步代码,用于获取字符串并将其分为 3 类。名称 (p1L1)、分钟 (p1L1min) 和秒 (p1L1sec)。然而,在创建它之后,我想到我需要某种方式来组织和分组每一圈的每个跑步者,考虑到他们的顺序在 Results.txt 中是非常随机的。我认为实现这一点的最佳方法是将每一行视为一个字符串,按字母顺序组织它们,然后将它们分开。

但是,我无法确定如何按字母顺序对字符串进行排序。我什至不确定这是最好的做事方式。我也不确定如何将它们分组。如果我的所有数据都来自文件,我如何确保 Akano 的 name 变量在我分解它们后始终与 Akano 的时间变量一起显示。

此时我能得到的任何指导或建议都会非常有帮助。我将上面引用的代码粘贴到下面:

int main()
{

    ifstream lapSource;
    lapSource.open("Results.txt");
    string lap, lapNumber;

    lapSource >> lap >> lapNumber;

    string p1L1, p1L1secstring;
    int p1L1min, p1L1sec;

    lapSource >> p1L1 >> p1L1min >> p1L1secstring;

    p1L1secstring.erase(0, 1);
    p1L1sec = stoi(p1L1secstring);

    return 0;
}

【问题讨论】:

  • 您不会从文件中读取冒号。建议你将read whole lines转成字符串,然后尝试解析字符串。

标签: c++ sorting


【解决方案1】:

您可以使用map<string, pair<int,int>> 数据结构来存储名称及其时间,其中pair 的第一个成员是分钟,第二个成员是秒。这将按字典顺序存储玩家的姓名。

你也可以使用结构体的向量。你可以像下面这样定义一个播放器的结构:

typedef struct player{
  string name;
  int min;
  int sec;
}player;

现在创建一个玩家向量:

vector<player> p;

从文件中获取输入并将它们存储在上面的向量中。在接受输入时,您可以尝试阅读整行然后解析它(但这取决于您将如何做)。您可以根据玩家的姓名对该向量进行排序。参考这个sorting a vector of structs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多