让我解释一下我想做什么:
我想改变这样的表达式: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;
}
答案 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;