我对此失去了理智(因为我不是一个非常有逻辑的人)。
我无法更改数据部分。
从下面的代码返回的字符串A = 1 AND (B = 2 OR C = 3 OR D = 4 OR )
不是我需要的(A = 1 AND (B = 2 OR C = 3 OR D = 4)
)。
我不明白的是如何避免最后一个“OR”。
我该如何修复以下代码?
enum Token {
Str(&'static str),
Value(&'static str),
StartGroup(&'static str),
EndGroup,
}
fn main() {
let data: Vec<Vec<Token>> = vec![
vec![Token::Str("A = "), Token::Value("1")],
vec![Token::Str(" AND ("), Token::StartGroup(" OR ")],
vec![Token::Str("B = "), Token::Value("2")],
vec![Token::Str("C = "), Token::Value("3")],
vec![Token::Str("D = "), Token::Value("4")],
vec![Token::EndGroup, Token::Str(")")],
];
let result = construct_string(data);
assert_eq!("A = 1 AND (B = 2 OR C = 3 OR D = 4)", result);
}
fn construct_string(tokens: Vec<Vec<Token>>) -> String {
let mut result = String::new();
let mut current = String::new();
let mut next = String::new();
for token in tokens {
for part in token {
match part {
Token::Str(str) => {
result.push_str(str);
}
Token::Value(val) => {
result.push_str(val);
}
Token::StartGroup(group) => {
next = group.to_string();
}
Token::EndGroup => {
current = String::new();
next = String::new();
}
}
}
if !current.is_empty() {
result.push_str(¤t);
}
current = next.to_string();
}
result
}
我转到
EndGroup
之前的向量并且它起作用了:编辑
在里面应用了修复
construct_string
,请看一下(想法是区分分隔符是否必须出现):