我试图从包含4行标题的数据文件中读取,并且还有一个我将存储到2d int数组中的数字列表
例如
头
头
头
头
int
INT
INT
INT
...
我需要以某种方式跳过这些包含文本的标题行,并且只使用int行并将它们存储到上述的2d数组中。当我打开文件并搜索它时,由于一开始的文本,它根本不存储任何值。我已经尝试了多个if语句和其他东西来解决这个问题,但到目前为止已经有效了。
int main()
{
ifstream imageFile;
imageFile.open("myfile");
if (!imageFile.is_open())
{
exit (EXIT_FAILURE);
}
int test2[16][16];
int word;
imageFile >> word;
while (imageFile.good())
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
test2[i][j] = word;
imageFile >> word;
}
}
}
答案 0 :(得分:1)
如评论中所述,您需要先阅读标题 - 这里我只是将标题存储在trash
变量中,该变量是每次存储新标题时都被覆盖的字符串:< / p>
std::string trash;
for (int i =0; i < 4; i++)
std::getline(imageFile, trash);
在您检查文件是否正确打开并且将直接跟随您声明2D数组并读取整数的原始代码之后,此部分将进行此操作。
正如评论中所说,你需要std::getline
作为一个整体读取每个标题行而不是一次一个单词,这是我的答案的第一个版本(imageFile >> trash;
)。 / p>
答案 1 :(得分:0)
你可以通过正则表达式和模式来实现这一点(修改2d数组的代码,这只是如何从文件或字符串中提取数字的示例):
std::string ss;
ifstream myReadFile;
myReadFile.open("foo.txt");
char output[100];
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
myReadFile >> output;
ss.append(output);
ss.append("\n");
}
}
myReadFile.close();
std::regex rx(R"((?:^|\s)([+-]?[[:digit:]]+(?:\.[[:digit:]]+)?)(?=$|\s))"); // Declare the regex with a raw string literal
std::smatch m;
std::string str = ss;
while (regex_search(str, m, rx)) {
std::cout << "Number found: " << m[1] << std::endl; // Get Captured Group 1 text
str = m.suffix().str(); // Proceed to the next match
}
输出:
Number found: 612
Number found: 551
Number found: 14124