我在这项任务的开始阶段真的很挣扎。我需要让用户在命令行上输入文本文件的名称。该文件将是一个以空格分隔的整数列表。我想查看数字并将它们输入到2D数组或向量中。这将永远是一个方形的数组,所以如果有100个数字,我可以做10X10。 我对(1维)数组(对于一个近2个月的初学者)很满意,但我真的很困惑从文本文件方面获取输入。 我不熟悉的主要部分是从文本文件和动态数组中读取(因为直到运行时我才知道大小。我在这里使用getline吗?
答案 0 :(得分:2)
C ++支持基本上根据需要调整大小的向量,因此允许您拥有任意大小的“数组”。您将使用getline读取每一行并创建向量。
你可以使用ifstream打开文件:ifstream fileToRead("file.txt");
然后你就可以从fileToRead中读取它就像是cin;
我们可以通过以下方式声明二维数组:
vector< vector<int> > SquareArray;
然后你可以开始阅读文件并输入它。
for (int i = 0; i < N; ++i)
{
vector<int> row;
for (int j = 0; j < N; ++j)
{
//same limit because its square
int readFromFile = 0;
fileStream >> readFromFile;
row.push_back(readFromFile);
}
SquareArray.push_back(row); //copies row into SquareArray
}
答案 1 :(得分:0)
首先,打开文本文件:
std::ifstream in("in.txt");
然后从文件中获取每一行,我们使用getline
。我们还需要一个字符串来保存该行的内容。这包含在<string>
标题中。
#include <string>
我们还需要继续读取每一行,直到到达文件末尾,因此我们需要一个循环机制。例如:
std::string str; while (std::getline(in, str))
getline
返回流文件,如果在读取输入时发生错误,则会在其基础位掩码中设置任何位。这就是循环的工作方式。
在循环内部,我们需要将字符串存储在字符串流中并将其传递给向量。像这样:
std::vector<std::vector<int>> orig(10, std::vector<int>(10)); // Your original 2D array int i = 0; while (std::getline(in, str)) { std::stringstream ss(str); std::vector<int>& v = orig[i]; std::copy(std::istream_iterator<int>(ss), std::istream_iterator<int>(), std::back_inserter(v)); ++i; }
对于上述代码,您需要<iterator>
和<algorithm>
标题。