There is a programming language with only **four** operations and **one** variable `X`

:

`++X`

and`X++`

**increments**the value of the variable`X`

by`1`

.`--X`

and`X--`

**decrements**the value of the variable`X`

by`1`

.

Initially, the value of `X`

is `0`

.

Given an array of strings `operations`

containing a list of operations, return *the final value of *

`X`

**Example 1:**

Input:operations = ["--X","X++","X++"]Output:1Explanation:The operations are performed as follows: Initially, X = 0. --X: X is decremented by 1, X = 0 - 1 = -1. X++: X is incremented by 1, X = -1 + 1 = 0. X++: X is incremented by 1, X = 0 + 1 = 1.

**Example 2:**

Input:operations = ["++X","++X","X++"]Output:3Explanation:The operations are performed as follows: Initially, X = 0. ++X: X is incremented by 1, X = 0 + 1 = 1. ++X: X is incremented by 1, X = 1 + 1 = 2. X++: X is incremented by 1, X = 2 + 1 = 3.

**Example 3:**

Input:operations = ["X++","++X","--X","X--"]Output:0Explanation:The operations are performed as follows: Initially, X = 0. X++: X is incremented by 1, X = 0 + 1 = 1. ++X: X is incremented by 1, X = 1 + 1 = 2. --X: X is decremented by 1, X = 2 - 1 = 1. X--: X is decremented by 1, X = 1 - 1 = 0.

**Constraints:**

`1 <= operations.length <= 100`

`operations[i]`

will be either`"++X"`

,`"X++"`

,`"--X"`

, or`"X--"`

.

```
struct Solution;
impl Solution {
fn final_value_after_operations(operations: Vec<String>) -> i32 {
let mut res = 0;
for op in operations {
if op.contains('+') {
res += 1;
} else {
res -= 1;
}
}
res
}
}
#[test]
fn test() {
let operations = vec_string!["--X", "X++", "X++"];
let res = 1;
assert_eq!(Solution::final_value_after_operations(operations), res);
let operations = vec_string!["++X", "++X", "X++"];
let res = 3;
assert_eq!(Solution::final_value_after_operations(operations), res);
let operations = vec_string!["X++", "++X", "--X", "X--"];
let res = 0;
assert_eq!(Solution::final_value_after_operations(operations), res);
}
```