C++从文件中读取文本并将字符串解析为int数组
首先我不是C++专家,我仍然在学习,所以任何见解都将不胜感激。这个问题起初似乎是一个简单的问题,但几个月后,我仍然无法找到一个可行的解决方案。我期望它有一个简单的答案,我只是俯视。C++从文件中读取文本并将字符串解析为int数组
下面是我在阅读类似的线程在这里和其他网站上写的一些代码。基本上我试图从包含GF256乘法数组的文本文件中读取(每256行256行)。逐行阅读似乎只是很好地证明了这一行(我知道我需要的是每行所需的字符串。这是我的问题。我似乎无法找到一种方法来解析这个字符串到一个int数组。我有很多这样的代码迭代,尝试了不同的尝试,但都没有为我工作。我认为这是一个非常简单的解决方案。再次,任何有关这个问题的见解将不胜感激。
int kGF = 0;
int multiGFtemp[256 * 256];
int n;
int main()
{
string multi_;
ifstream fileGF("GF256MultiTable.txt");
if(fileGF.is_open())
{
while(getline(fileGF,multi_))
{
cout << multi_ << endl;
cin.get();
}
fileGF.close();
}
else
{
cout << "File is not open" << endl;
}
cin.get();
cout << multi_;
stringstream stream2(multi_);
while(stream2)
{
stream2 >> n;
cout << n << endl;
multiGFtemp[kGF] = n;
kGF++;
}
for(int k = 0; k < 256 * 256; k++)
{
/*
cout << multiGFtemp[k] << " ";
*/
}
cin.get();
return 0;
}
您的程序将分析multi_
的内容,该内容在该位置是该文件的最后一行。
你可以将它移动到循环中,但这只会使事情变得复杂 - 如果你只想要一个普通数组中的256 * 256数字,你可以忽略文件结构。
这是啜该文件到一个数组的一种方式:
int multiGFtemp[256 * 256];
int main()
{
ifstream fileGF("GF256MultiTable.txt");
int kGF = 0;
while (kGF < 256 * 256 && fileGF >> multiGFtemp[kGF])
{
kGF++;
}
for(int k = 0; k < kGF; k++)
{
cout << multiGFtemp[k] << " ";
}
}
这正是我所期待的。非常简单。我尝试将解析转移到循环中,并能够以这种方式工作,但您在此处提供的解决方案要简单得多。谢谢! – pfe
我假设你想在一个已知的格式来读取一个字符串转换参数。 例如,您有包含一行的文件:“X = 1035,Y = 6658”。 如果是这种情况,我宁愿使用sscanf。
例如:
string format("X = %d, Y = %d");
string str("X = 1035, Y = 6658");
int x, y;
sscanf(str.c_str(), format, &x, &y);
对于将该行解析为数组的主要问题,您错过了答案。 – Dusteh
在你提供的代码中,有唯一一个可能被处理的行是最后一个,当你用'getline'读取文本时,你应该处理它。考虑编写一个函数,它将一行(字符串)和一个数组作为参数,并用第一个的内容填充后者,从文本行读取数字的问题可以通过使用“CSV C++”搜索并查看其他人已经做到了。 – riodoro1
您可以显示文件如何格式化的示例吗? – NathanOliver
这是一个格式为.txt的文件,其中;是一条新线。 0 0 0 0 ...; 1 1 1 1 1 ...; 1 2 3 5 ...;等等。每个数字之间有一个未定义的空白空间,但每个256个编号行末尾都有一个明确的新行。 – pfe