我正在使用解析器来解析网格文件(已经转换为字符串)以生成简单的2D图形。下面是一个如何格式化文件的例子(有这样的多个网格构成文件):
# left ladder pole
begin_mesh
dimension 2 2
begin_vertices
-0.3 0.85
-0.2 0.85
-0.3 -0.85
-0.2 -0.85
end_vertices
end_mesh
'#'表示注释行的开头,您可以看到显示x和y值开头的begin_mesh和begin_vertices关键字。
所以基本上我想解析和标记化'begin_vertices'和'end_vertices'之间的空格之间的顶点x和y值(数字)。有没有办法使用stringstream(或可能是其他字符串函数)来做到这一点?我有更多使用字符串函数的经验,但由于空格和数字的长度不同,我遇到了麻烦。
感谢任何帮助,谢谢!
答案 0 :(得分:0)
如果我正确理解了您想要实现的目标,那么您可以使用istringstream
从文件中读取字符串中的输入。以下程序显示了如何解析您提供的输入:
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
struct point
{
double x = 0;
double y = 0;
friend istream& operator >> (istream& is, point& p)
{
is >> p.x;
is >> p.y;
return is;
}
};
template<typename InputStream>
void parse_vertices(InputStream& is, vector<point>& v)
{
point p;
while (is >> p)
{
v.push_back(p);
}
}
上述函数是通用的,这意味着它对字符串流或文件流同样有效。假设您想要从字符串中读取输入,这就是您调用它的方式:
int main()
{
string s =
R"(-0.3 0.85
-0.2 0.85
-0.3 -0.85
-0.2 -0.85
)";
istringstream is(s);
vector<point> vertices;
parse_vertices(is, vertices);
for (point const& p : vertices)
{
cout << p.x << " " << p.y << endl;
}
}
希望这有帮助。