我需要帮助,我试图读取一个看起来像这样的文件:
.........
.........
.........
.........
....X....
.........
.........
.........
.........
我需要将其解析为chars的2d向量,以便稍后可以对其进行修改。
到目前为止,我想出的是
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
//look up line by line parsing
using namespace std;
int main(int argc, char* argv[]) {
vector<vector<char>> data;
ifstream myReadFile;
myReadFile.open("input1.txt");
for (int i = 0; i < data.size(); i++) {
int c = 0;
char currentchar;
while (!myReadFile.eof()) {
data[i][c] = currentchar;
c++;
currentchar = myReadFile.get();
}
}
//for ()
myReadFile.close();
return 0;
}
答案 0 :(得分:0)
您需要在向量中保留空间,然后才能通过data[i][c] = currentchar;
为向量分配值。但是在阅读内容之前可能很难保留空间。
一种更简单的方法是使用向量(即push_back
)的动态增长功能,并使用std::string
作为行内容,因为这样您就可以轻松地阅读完整的行。您仍然可以访问/更改内容,然后通过data[i][c] = currentchar;
。请参见以下代码对此进行说明:
#include <sstream>
#include <iostream>
#include <vector>
int main() {
const char* fileContent = R"foo(.........
.........
.........
.........
....X....
.........
.........
.........
.........)foo";
std::vector<std::string> lines;
stringstream ss(fileContent);
string line;
while (getline(ss,line)) {
lines.push_back(line);
}
lines[2][5] = 'Y';
for (auto line : lines) {
for (auto c : line) {
cout << c << " ";
}
cout << endl;
}
}
输出:
. . . . . . . . .
. . . . . . . . .
. . . . . Y . . .
. . . . . . . . .
. . . . X . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
答案 1 :(得分:0)
使用std::getline
和std::string
可以使生活更轻松:
std::string row_text;
std::vector<std::string> grid;
while (std::getline(myReadFile, row_text))
{
grid.push_back(row_text);
}
可以使用数组符号访问std::string
。