J**9 发帖数: 835 | 1 condition ? value_if_true : value_if_false
a?b:c
a
|
b c
class Node {
String variableName;
Node left, right;
}
class Expression {
Node root;
}
a?b?c:d:e
a
|
b e
|
c d
Expression *expressionParser(char *expression); | z***e 发帖数: 58 | 2
从左开始往右遍历 试图找到冒号使得分割?后面的字符串,如a?[...]:[...] 就是找到
: , 找法就是如果碰到一个 ? 就加一碰到: 就减一,这样第一个抵消?和:的也就是0
的:就是要找的冒号。然后对两个[...] 分别递归即可。随便敲了下,将就看吧。
Node createExpression(int start, int end, String str ){
if(right== left) return new Node(str[start]);
int count = 0;
Node node =new Node(str.charAt(start));
int breakIndex = 0;
for(int i = start; i <= end; ++i){
if(str.charAt(i) == '?') count++;
else if(str.charAt(i) == ':')count--;
if(count == 0) { breakIndex= i; break;}
}
node.left = createExpression(start+2,breakIndex-1);
node.right = createExpression(breakIndex + 1, end);
return node;
}
createExpression(0,str.length()-1,str);
【在 J**9 的大作中提到】 : condition ? value_if_true : value_if_false : a?b:c : a : | : b c : class Node { : String variableName; : Node left, right; : } : class Expression {
| J**9 发帖数: 835 | |
|