C++ 从文件C+;中的一行中分离多个输入+;

C++ 从文件C+;中的一行中分离多个输入+;,c++,C++,我有这个文件,我需要输入到我的代码。在这种情况下,^和+是运算符 AB+^AB+^A^B AB^C^D+AB^CD+^A^B^CD AB^C^D+^AB^C^D+A^B^C^D B^D+^B^D ^A^BD+^A^B^D B^D+^A^BD+A^B^C ^B^C+BCD+B^C^D A^C+ACD+^A^CD AB^D+^ABD+A^BD+^A^B^D B^D+^A^CD+^A^B^C^D 我希望将“+”之间的每个节点分开,但我也希望将行分开。例如,第一行将被分为AB、^AB、^A^B,并且将

我有这个文件,我需要输入到我的代码。在这种情况下,
^
+
是运算符

AB+^AB+^A^B
AB^C^D+AB^CD+^A^B^CD
AB^C^D+^AB^C^D+A^B^C^D
B^D+^B^D
^A^BD+^A^B^D
B^D+^A^BD+A^B^C
^B^C+BCD+B^C^D
A^C+ACD+^A^CD
AB^D+^ABD+A^BD+^A^B^D
B^D+^A^CD+^A^B^C^D

我希望将“+”之间的每个节点分开,但我也希望将行分开。例如,第一行将被分为AB、^AB、^A^B,并且将与第二行分开。我知道getline(string,file,“+”)函数,但我不知道如何使用该方法区分每一行。任何帮助都将不胜感激

首先使用
getline
读取文件中的所有行。对于每一行,将该行拆分为操作数向量:

// copied from my answer on Code Review: https://codereview.stackexchange.com/a/238026
auto split(std::string_view s, std::string_view delimiter)
{
    std::vector<std::string> result;

    std::size_t pos_start = 0, pos_end;
    while ((pos_end = s.find(delimiter, pos_start)) != s.npos) {
        res.push_back(s.substr(pos_start, pos_end - pos_start));
        pos_start = pos_end + delimiter.size();
    }

    res.push_back(s.substr(pos_start));
    return res;
}

从使用普通的花园品种开始,分别阅读每一行。现在你已经解决了一半的问题。你手头有每一行,只有一行可以处理。现在,取一行,在+符号处拆分它,这应该是一项简单的工作。你不清楚这个简单方法的哪一部分?我现在空白。一旦我把它们分成不同的行,我该如何将它们分开呢?也许可以看看这里:
std::ifstream file{"filename"};

std::vector<std::vector<std::string>> data;
for (std::string line; std::getline(file, line);) {
    data.push_back(split(line, "+"));
}