我不知道该如何表达我的问题,所以我会尽力解释。
我正在尝试使用Rust为一个在终端窗口中运行的程序编写UI。这个程序有两个标签,我的想法是画出标签的两边,得到该行的长度,减去2得到它们的名称的正确位置,然后插入名称,得到这样的结果:
╭────────╮╭───────────╮
│ Lingon ││ Blueberry │
不幸的是,我不能减法没有程序恐慌。如果我去掉减法,加上一个println!为了查看每个标签末尾的长度,它正确地打印了4和14,但在2和10处错误地插入了名称。如果我将“\u{2502}
“改为“l
“(小写L),它将“正确地”将它们分别放在第4位和第14位。
我尽可能地简化了原始代码,并在底部添加了一个rust playground链接。
fn main() {
let tab_names = vec!["Lingon", "Blueberry"];
let win_cols = 100;
let mut tab_rows = vec![String::with_capacity(win_cols); 2];
for name in tab_names {
tab_rows[0].push_str("\u{256d}");
tab_rows[0].push_str(&std::iter::repeat("\u{2500}").take(name.chars().count()+2).collect::<String>());
tab_rows[0].push_str("\u{256e}");
tab_rows[1].push_str("\u{2502}");
tab_rows[1].push_str(&std::iter::repeat("\u{0020}").take(2).collect::<String>());
tab_rows[1].push_str("\u{2502}");
let name_placement = tab_rows[1].chars().count();
println!("{}\r", name_placement);
tab_rows[1].insert_str(name_placement, name)
}
for i in 0..tab_rows.len() {
println!("{}\r", tab_rows[i]);
}
}
**当我在发帖前编辑我的问题时,我可能已经意识到问题是什么了。
我试图自己回答这个问题,但请注意,我不是一个程序员,可能只是让自己更大的傻瓜。如果知道答案的人能证实,我将不胜感激.
1条答案
按热度按时间htrmnn0y1#
\u{2502}
'(垂直线),由三个字节表示。当我试图将一个 String 插入到一个字符内的字节位置时,程序死机了。