【发布时间】:2018-09-25 13:16:27
【问题描述】:
我在一个字符串中有这个矩阵:
-78.45 5120 45.369 7.456
-0.140 1.012 1.161 7.456
-4.4287 8.963 1.121 7898
-8.753 8.159 3.852 2.415
0.000 2.456 4.655 6.041
0.000 3.132 8.275 1.788
7.489 8.056 7.288 5.698
4.050 7.456 7.340 2.025
0.090 9.478 9.395 6.416
1.132 6.866 8.450 2.126
6.222 5.142 7.596 0.56
9.121 2.256 5.641 3.741
8.896 1.488 2.858 2.456
我想浏览它并将其存储在矩阵向量或浮点矩阵中。 我实际上可以将它存储在一个向量中,这是功能代码:
int main()
{
std::istringstream str(
"-78.45 5120 45.369 7.456\n"
"-0.140 1.012 1.161 7.456\n"
"-4.4287 8.963 1.121 7898\n"
"-8.753 8.159 3.852 2.415\n"
"0.000 2.456 4.655 6.041\n"
"0.000 3.132 8.275 1.788\n"
"7.489 8.056 7.288 5.698\n"
"4.050 7.456 7.340 2.025\n"
"0.090 9.478 9.395 6.416\n"
"1.132 6.866 8.450 2.126\n"
"6.222 5.142 7.596 0.56\n"
"9.121 2.256 5.641 3.741\n"
"8.896 1.488 2.858 2.456\n");
std::string space = " ";
std::string line;
size_t l_position = 0;
std::vector<float> vectorNumber;
while (std::getline(str, line)) {
while ((l_position = line.find(space)) != std::string::npos)
{
float nombre = std::stof(line.substr(0, l_position));
vectorNumber.push_back(nombre);
line.erase(0, l_position + space.length());
}
vectorNumber.push_back(std::stof(line));
}
int w = 0;
for(vector<float>::iterator it=vectorNumber.begin(); it!=vectorNumber.end(); ++it)
{
cout << *it << " ";
w++;
if (w==4){
cout << endl;
w = 0;
}
}
return 0;
}
当我尝试将它存储在向量的向量中时,每行的最后一个数字块被删除,我不知道为什么。我快疯了,你能帮帮我吗?
这是我的代码:
int main()
{
std::istringstream str(
"-78.45 5120 45.369 7.456\n"
"-0.140 1.012 1.161 7.456\n"
"-4.4287 8.963 1.121 7898\n"
"-8.753 8.159 3.852 2.415\n"
"0.000 2.456 4.655 6.041\n"
"0.000 3.132 8.275 1.788\n"
"7.489 8.056 7.288 5.698\n"
"4.050 7.456 7.340 2.025\n"
"0.090 9.478 9.395 6.416\n"
"1.132 6.866 8.450 2.126\n"
"6.222 5.142 7.596 0.56\n"
"9.121 2.256 5.641 3.741\n"
"8.896 1.488 2.858 2.456\n");
std::string space = " ";
std::string line;
size_t l_position = 0;
std::vector<float> vectorNumber;
std::vector<vector<float>> vectorOfVectorNumber;
while (std::getline(str, line)) {
while ((l_position = line.find(space)) != std::string::npos)
{
float nombre = std::stof(line.substr(0, l_position));
vectorNumber.push_back(nombre);
line.erase(0, l_position + space.length());
}
vectorOfVectorNumber.push_back(vectorNumber);
}
int w = 0;
for (int i = 0; i < vectorOfVectorNumber.size(); i++)
{
for (int j = 0; j < vectorOfVectorNumber[i].size(); j++)
{
cout << vectorOfVectorNumber[i][j] << " ";
}
cout << endl;
}
return 0;
}
我想要最简单的解决方案来存储它,即使它在选项卡的浮动选项卡中。
【问题讨论】:
-
你错过了最后一个,因为你搜索了一个空格,但是你的行尾没有空格,只有
\n。我建议您不要手动执行此操作,而是从您的行字符串创建一个字符串流,然后从中读取数字。 -
请注意,不仅平面向量更易于阅读,它实际上是存储矩阵的最有效方式(只要矩阵是密集的。其他表示更适合备用矩阵) ,因此可能值得考虑继续使用工作代码。
标签: c++ string parsing matrix vector