用值替换表达式中的变量

时间:2014-08-11 14:08:02

标签: c++ expression

让我解释一下我想做什么:

我想改变这样的表达式:x *(2 + 3) - (y + 1)

至:5 *(2 + 3) - (6 + 1)

使用:instVar('x',5);             instVar('y',6);

我的问题是我只能输出“原始”表达式而不是更改的“修改”表达式。我不知道为什么,我希望你可以指出我做错了什么。

这是我的代码:

void Expression::instVar(char var, int val)
{
    char vars[0];
    int vals[0];

    if(modifiedExpr == "")
    {
        modifiedExpr = originalExpr;
        vars[0] = var;
        vals[0] = val;
    }
    else
    {
        for(int i = 0; i < originalExpr.length(); i++)  //Searching for the var in the original expression
        {
            if(vars[i] == var)  //If the variable is found
            {
                modifiedExpr = originalExpr;    //Setting the expression to the original one so that x can be "replaced"
                vals[i] = val;  //Replace the variable with the value - Does not work :(((
                break;
            }
        }
    }

    //Testing the output if it works
    cout << modifiedExpr << endl;
}

2 个答案:

答案 0 :(得分:0)

此:

            vals[i] = val;  //Replace the variable with the value - Does not work :(((

不起作用,因为左手大小是一个字符,右手边是一个整数。如果你知道val只会是一个数字,你可以做这个工作:

            vals[i] = '0'+val;

但是如果val可能超过一位数,那么你必须使用类似sprintf的东西将整数写入字符串。这可能还需要一些更复杂的字符串分配,并将字符从原始字符复制到块中修改。在c ++中,您应该使用std::streambuf

答案 1 :(得分:0)

上述代码存在一些问题 首先,您声明长度为0的数组,并且在代码中没有修改modifiedExpr的位置,除非将其设置为等于originalExpr(vals和var不是任一表达式的一部分)。

检查此处是否替换字符串中的值: How to replace all occurrences of a character in string?

这里将int更改为ascii: Convert an int to ASCII character

最终得到类似的东西:

modifiedExpr = originalExpr;
char a_val = '0' + val;
std::replace( modifiedExpr.begin(), modifiedExpr.end(), var, a_val);

//Testing the output if it works
std::cout << modifiedExpr << std::endl;