如何使用istream_iterators来分割方程?

时间:2017-05-01 03:39:44

标签: c++ istream-iterator

我试图将( 1 + 2 )这样的字符串拆分为一个向量,当使用istream_iterators<string>时,它不会拆分括号,所以我得到了像

这样的向量输出

(1 , + , 2)当我需要( , 1, + , 2 ,)

是否可以使用istream_iterator来实现此目的?

string eq = "(1 + 2)";

istringstream ss(eq);
istream_iterator<string> begin(ss);
istream_iterator<string> end;
vector<string> vec(begin, end);

2 个答案:

答案 0 :(得分:1)

您可以通过创建自定义类型$(".input").html("test").trigger('change'); 并将其与之一起使用来执行此操作 //remove rows with instances of "5/13/2013" for (int i = 0; i < tableModel.getRowCount(); i++) { if (((String)tableModel.getValueAt(i, 0)).equals("5/13/2013")) { tableModel.removeRow(i); }//end of if block }//end of for block 。额外功能:此代码将解析多个数字,多个运算符和嵌套表达式。好享受吧。 :)

Token

答案 1 :(得分:0)

我认为你不能使用istream_iterator来做到这一点。相反,只需手动完成:

vector<string> vec;
vec.reserve(eq.size() / 4); // rough guess
bool in_number = false;
for (char ch : eq) {
    if (isspace(ch)) {
        in_number = false;
    } else if (isdigit(ch)) {
        if (in_number) {
            vec.back().push_back(ch);
        } else {
            vec.emplace_back(1, ch);
            in_number = true;
        }
    } else {
        vec.emplace_back(1, ch);
        in_number = false;
    }
}