我已经为这个问题挠头好几个小时了。读完铁锈书里关于切片的那一章之后。我试图在循环中连接字符串。
fn append_words(times: u16){
let mut final_word = String::new();
let word: &str = "aahing ";
for _ in 0..times {
let tmp = format!("{}{}", &mut final_word[..], word);
final_word.push_str(&tmp[..]);
println!("{}", final_word);
}
}
aahing
aahing aahing aahing
aahing aahing aahing aahing aahing aahing aahing
运行正常
当我尝试使用vector
中的元素而不是连接在函数内声明的&str
时,问题就出现了fn select_words(words: Vec<&str>, times: u16){
let mut final_word = String::new();
println!("{}", words[5]);
for _ in 0..times {
let tmp = format!("{}{}", &mut final_word[..], words[5]);
final_word.push_str(&tmp[..]);
}
println!("{}", final_word);
}
aahing
aahing
不是连接并显示类似第一个输出的东西,字符串它是覆盖它。我认为情况就是这样,因为我开始尝试在Vec<&str>
中连接不同的单词,但它在每次迭代中都重写它们。
我发现了这些类似的问题(第一个真的很有帮助),但再次,当不使用Vec<&str>
它工作得很好。如何连接字符串?在for循环中追加字符串
我没有考虑到所有权或类似的东西吗?
提前谢谢你,我正在看生锈的书,所以我还是一个生锈的新手
编辑:
我构建向量的方式是从一个文件,这也是我调用函数的方式。
use structopt::StructOpt;
use structopt::clap;
#[derive(StructOpt)]
#[structopt(setting = clap::AppSettings::InferSubcommands)]
struct Cli {
#[structopt(short = "f", long = "file",
help="get words from specific file",
default_value="./words.txt",
parse(from_os_str))]
file: std::path::PathBuf,
}
fn main() {
let args = Cli::from_args();
let words = std::fs::read_to_string(&args.file)
.expect("could not read file");
let word_list = words.split('n');
let words_vec: Vec<&str> = word_list.collect();
select_words(words_vec, 3);
}
文件格式为
a
aa
aaa
aah
aahed
aahing
aahs
我认为">构建向量"部分工作得很好。
两个函数都工作得很好,正如@kmdreko和@loganfsmyth所指出的,问题是我构建向量的方式。
去掉元素r
后,每个元素的末尾都有一个隐藏字符。现在一切正常
谢谢大家:)
PS:我应该事先做一个dos2unix
。