Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用从指定位置或标签开始的stringstream标记字符串_C++_String_Parsing_Stringstream - Fatal编程技术网

C++ 使用从指定位置或标签开始的stringstream标记字符串

C++ 使用从指定位置或标签开始的stringstream标记字符串,c++,string,parsing,stringstream,C++,String,Parsing,Stringstream,我正在开发一个解析器来解析一个网格文件(已转换为字符串),从而生成一个简单的二维图形。以下是文件格式的示例(有多个这样的网格组成文件): “#”表示注释行的开头,您可以看到显示x和y值开头的begin_网格和begin_顶点关键字 所以基本上我想解析和标记“开始顶点”和“结束顶点”之间的空白处的顶点x和y值(数字)。有没有办法使用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;
    }
}