Closed. This question is opinion-based。它当前不接受答案。
想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
Improve this question
下面的代码为我工作正常。
从
这不等同于原始代码中的
另一个选择是使用
想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
Improve this question
下面的代码为我工作正常。
let mut buffer = String::new();
io::stdin().read_line(&mut buffer);
buffer = buffer.trim().to_string();
从
'\n'
修剪read_line
的更好/正确的方法是什么? 最佳答案
我只看到可以在您的代码中进行改进的一个方面:分配两个字符串以读取一行的事实。第一个分配发生在将行读入buffer
时,第二个分配发生在to_string()
中。
根据上下文,有几种方法可以避免这种情况。最简单的方法是简单地避免调用to_string
,并继续使用&str
而不是String
。如果这对您不起作用,您还可以编写自己的函数以在字符串末尾修剪换行符:
fn trim_newline(s: &mut String) {
if s.ends_with('\n') {
s.pop();
if s.ends_with('\r') {
s.pop();
}
}
}
这不等同于原始代码中的
trim()
,因为它仅从字符串的末尾除去换行符,而不是从字符串的末尾除去任意空格。另一个选择是使用
lines()
迭代器,该迭代器从stdin生成行而不会终止换行符:use std::io::{BufRead};
let stdin = std::io::stdin();
for line in stdin.lock().lines() {
let line = line?; // line is a Result<String, io::Error>
}
关于string - 从io::stdin()。read_line()修剪 '\n'的更好方法是什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54395227/