C++ 使用从指定位置或标签开始的stringstream标记字符串
我正在开发一个解析器来解析一个网格文件(已转换为字符串),从而生成一个简单的二维图形。以下是文件格式的示例(有多个这样的网格组成文件): “#”表示注释行的开头,您可以看到显示x和y值开头的begin_网格和begin_顶点关键字 所以基本上我想解析和标记“开始顶点”和“结束顶点”之间的空白处的顶点x和y值(数字)。有没有办法使用stringstream(或者其他字符串函数)来实现这一点?我在使用字符串函数方面有更多的经验,但是因为空格和数字的长度不同,我遇到了麻烦C++ 使用从指定位置或标签开始的stringstream标记字符串,c++,string,parsing,stringstream,C++,String,Parsing,Stringstream,我正在开发一个解析器来解析一个网格文件(已转换为字符串),从而生成一个简单的二维图形。以下是文件格式的示例(有多个这样的网格组成文件): “#”表示注释行的开头,您可以看到显示x和y值开头的begin_网格和begin_顶点关键字 所以基本上我想解析和标记“开始顶点”和“结束顶点”之间的空白处的顶点x和y值(数字)。有没有办法使用stringstream(或者其他字符串函数)来实现这一点?我在使用字符串函数方面有更多的经验,但是因为空格和数字的长度不同,我遇到了麻烦 感谢您的帮助,谢谢 如果我正
感谢您的帮助,谢谢 如果我正确理解了您想要实现的目标,那么可以使用
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);
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构点
{
双x=0;
双y=0;
friend istream&operator>>(istream&is,point&p)
{
is>>p.x;
是>>年;
回报是;
}
};
模板
void parse_顶点(InputStream&is、vector&v)
{
p点;
while(is>>p)
{
v、 推回(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;
}
}
intmain()
{
串=
R“--0.30.85
-0.2 0.85
-0.3 -0.85
-0.2 -0.85
)";
istringstream为(s);
向量顶点;
解析_顶点(is,顶点);
对于(点常量和点:顶点)
{
库特
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;
}
}