C++ 以不同的行长度逐行读取ints

C++ 以不同的行长度逐行读取ints,c++,string,int,extract,C++,String,Int,Extract,我有一个文本文件,每一行代表一个多边形的顶点 (-189, 102), (-62, 113), (-40, 56), (-105, -11) (-692, 403), (-669, 308), (-572, 273) (-750, 480), (750, 480), (750, -480), (-750, -480) (57, -218), (47, -270), (134, -366), (235, -366), (300, -260), (335, -182) 如何读取每个顶点x和y并将

我有一个文本文件,每一行代表一个多边形的顶点

(-189, 102), (-62, 113), (-40, 56), (-105, -11)
(-692, 403), (-669, 308), (-572, 273)
(-750, 480), (750, 480), (750, -480), (-750, -480) 
(57, -218), (47, -270), (134, -366), (235, -366), (300, -260), (335, -182)
如何读取每个顶点x和y并将它们存储到int变量中。请注意,每行可以有不同数量的对。我还想逐行进行,以便知道文件中新多边形何时开始。

我正在尝试获取每一行,但是我该如何从该行中提取int呢

int main() {
    string line;
    ifstream myfile("input.txt");
    if (myfile.is_open())
    {
        while (getline(myfile, line))
        {
            //cout << line << '\n';
            stringstream stream(line);

        }
        myfile.close();
    }

    else cout << "Unable to open file";

    return 0;
}
intmain(){
弦线;
ifstream myfile(“input.txt”);
如果(myfile.is_open())
{
while(getline(myfile,line))
{

//cout你得到的是正确的
line
。你只需要建立一个容器(如果你总是有一对两个值,我将使用
向量。我建议从删除所有特殊符号开始,例如“(”,”)“,”,”等。那么,使用一个可用的tokenizers@nosbor虽然我同意你的说法,如果可能的话,输入应该简化,但我们可以很容易地使用
sregex_迭代器
在C++11中以其当前格式提取此信息:如果我简化输入,使每行中的数字仅为sep@ GeorgeP White空间是C++中选择的界线。但是它不会简化代码。我已经编辑了我的答案来演示。这里的真正理想是使用.xml,但是这又需要一个正则表达式或第三方库来解析。
\s*,?\s*\(\s*([-0-9]+)\s*,\s*([-0-9]+)\s*\)
regex re(R"~(\s*,?\s*\(\s*([-0-9]+)\s*,\s*([-0-9]+)\s*\))~");
vector<pair<int, int>> temp;

transform(sregex_iterator(cbegin(line), cend(line), re), sregex_iterator(), back_inserter(temp), [](const auto& it) { return make_pair(stoi(it[1]), stoi(it[2])); });
foo.push_back(temp);
istringstream stream(line);
vector<pair<int, int>> temp;

for(pair<int, int> i; stream >> i.first >> i.second;) temp.push_back(i);
foo.push_back(temp);