如何为txt文件中的每个名称创建一个整数?

Avr*_*Pop 1 c++ sorting text-files

我有一个包含这样内容的文本文件:Bill, 89 Alex, 64 Dan, 29,它代表一些学生的名字和他们的笔记.
我想按笔记对它们进行升序排序,我的想法是为每个名称创建一个整数,例如:int dan = 29;所以我可以对它们进行排序,但我不知道如何从文本文件中为这些名称分配一个整数.
希望你能帮忙,因为这是我第一次制作一个更复杂的程序.谢谢!

pre*_*rez 5

这里的问题是在C++中(如在C中),你必须在编译时定义所有变量,即编写代码时.在你的例子中,你有一个带有任意行数的文本文件,所以当你编写代码时,你真的不知道它的内容.这就是为什么你不能为你的文件的每一行都有自己的变量.因此,如果您需要存储有关文件每一行的信息,则可以执行此操作.首先,定义将存储您的信息(即名称为+整数的字符串)的格式.这是您最有可能需要的地方struct或类似的地方.struct并且class是在一个结构中聚合不同变量的方法(基本上,它们不仅仅是那个,但这不是目前的重点).如果你写的像smth

struct Data {
  std::string name;
  int ratio;
};
Run Code Online (Sandbox Code Playgroud)

这意味着您刚刚定义了名为Data的数据类型,其中包含"name"和"ratio"字段.所以你可以像这样使用它:

Data d;
d.name = "Ben";
d.ratio = 42;
Run Code Online (Sandbox Code Playgroud)

在此之后,您需要一些可以让您存储许多此数据条目的实体.例如,您可以使用数组.想象一下,你将在这里使用静态数组:

const std::size_t lineCount = getLineCount();
Data data_array[lineCount]; //Will not compile, since you cannot use variables as static arrays's size
for( std::size_t i = 0; i < lineCount; ++i ) {
  data_array[i].name = readName();
  data_array[i].ratio = readRatio();
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,此处的问题是,在编写代码时,您无法知道文本文件的行数.所以你可以用这段代码动态数组:

const std::size_t lineCount = getLineCount();
Data* data_array = new Data[lineCount];
for( std::size_t i = 0; i < lineCount; ++i ) {
  data_array[i].name = readName();
  data_array[i].ratio = readRatio();
}
delete[] data_array;
Run Code Online (Sandbox Code Playgroud)

如果你在实际工作之前完成了你的文件,你可以通过某种方式设法知道行的数量,这将是有效的,这通常不是重点.

原始动态数组也不是很好用,因为你必须担心新的/删除函数对.因此,这里来自Standart模板库的类称为容器.这些类为您提供了在其中插入数据的方法,并以多种方式使用此数据.这是来自前答案的类"map","unordered_map","multimap","vector"等.他们最容易理解的是矢量,你可以在这里阅读它.其他人(比如说,地图)应该更适合你的任务.

最后,要对这些数据的数组(或容器)进行排序,您可以使用Standart Template Library中称为算法的函数.它们提供了以您需要的方式操作数据的通用方法.你可以在这里阅读更多.

不确定我需要在这里说更多,探索链接,继续学习,祝你好运!