ver_incr/
lib.rs

1#![feature(let_chains)]
2
3pub fn ver_incr(ver: &str) -> String {
4  let mut iter = ver.char_indices().rev();
5  let mut end = None;
6  let mut start = None;
7
8  // 第一步:找到数字的最后一位
9  for (i, c) in &mut iter {
10    if c.is_ascii_digit() {
11      end = Some(i + 1);
12      start = Some(i);
13      break;
14    }
15  }
16
17  // 第二步:找到数字的第一位
18  if end.is_some() {
19    for (i, c) in iter {
20      if c.is_ascii_digit() {
21        start = Some(i);
22      } else {
23        break;
24      }
25    }
26  }
27
28  if let Some(start) = start
29    && let Some(end) = end
30  {
31    let num: u64 = ver[start..end].parse().unwrap();
32    let new_num = num + 1;
33    let new_ver = format!("{}{}{}", &ver[..start], new_num, &ver[end..]);
34    new_ver
35  } else {
36    // 如果没有找到数字部分,在结尾添加 ".0"
37    format!("{}.0", ver)
38  }
39}