我无法想到将字符串向量转换为赋值语句的右值的有效方法。所以例如,我有一个带有三个元素“5”,“*”,“3”的向量,所以我需要的是一个赋值语句,它基本上等同于以下
int myInteger = 5 * 3;
提前致谢;
答案 0 :(得分:1)
我假设你知道变量的顺序,或者可以确定变量的顺序以及运算符的顺序。我还假设,因为你正在使用一个向量,所以可能有多个变量(不是重点:))。
鉴于此,您只需要转换变量并编写逻辑以按正确的顺序应用运算符(由语言的运算符优先级指定)。
假设我们使用的是Javascript(see precedence here)。为简单起见,我们只处理乘法,除法,加法和减法运算符。
<script>
var foo = 5*4+16/2-3*2; //should be 22
var bar = ["5","*","4","+","16","/","2","-","3","*","2"];
var done = parseVec(bar); //should calculate to 22
//there are no vectors in javascript, so we'll go with an array to demonstrate
//all parsing assumes that values in the array are in decimal, not octal or hex
function parseVec (array) {
var result, i, h, j, action;
var newarray = [];
//decision based on order of operations...all multiplication will happen
//first, then division, then addition, etc...
if (array.indexOf("*") > 0 && array.indexOf("*") < (array.length-1)) {
i = array.indexOf("*");
action = "*";
} else if (array.indexOf("/") > 0 && array.indexOf("*/") < (array.length-1)) {
i = array.indexOf("/");
action = "/";
} else if (array.indexOf("+") > 0 && array.indexOf("+") < (array.length-1)) {
i = array.indexOf("+");
action = "+";
} else if (array.indexOf("-") > 0 && array.indexOf("-") < (array.length-1)) {
i = array.indexOf("-");
action = "-";
} else
return useParseFloat(array[0]) ? parseFloat(array[0], 10) : parseInt(array[0], 10);
//operate on the value preceding and following array[i]...
h = useParseFloat(array[i-1]) ? parseFloat(array[i-1], 10) : parseInt(array[i-1], 10);
j = useParseFloat(array[i+1]) ? parseFloat(array[i+1], 10) : parseInt(array[i+1], 10);
switch (action)
{
case "*":
result = h * j;
break;
case "/":
result = h / j;
break;
case "+":
result = h + j;
break;
case "-":
result = h - j;
break;
}
//recreate the array for recursion
for(var i2 = 0; i2 < array.length; i2++)
{
if (i2 == i)
newarray.push(result.toString());
else if (i2 != (i-1) && i2 != (i+1))
newarray.push(array[i2]);
}
return parseVec(newarray);
}
//should I parse this as an int or float?
function useParseFloat(val) {
return (val.indexOf(".") >= 0 && val.indexOf(".") < (val.length-1)) ? true : false;
}
</script>
这应该让您对如何完成给定任务有一个很好的了解。通过一些游戏和修补,您可以包括对大多数操作符和括号的支持。
答案 1 :(得分:0)
您必须逐个元素地解析。假设你知道你的向量将有三个元素(字符串),所以你可以这样做:
vector<string> v = {"5","*", "3"};
int x, y;
char c;
stringstream(a);
string T = v[0]+v[1]+v[2];
a << T;
a >> x >> c >> y;
现在你应该检查c中的操作并执行它。