在循环内连接 Vec<&str> 元素时覆盖字符串 - rust



我已经为这个问题挠头好几个小时了。读完铁锈书里关于切片的那一章之后。我试图在循环中连接字符串。

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

相关内容

  • 没有找到相关文章

最新更新