[英]string overwriting when concat Vec<&str> element inside loop - rust
所以我一直在為這個問題撓頭幾個小時。 在閱讀了 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
這工作得很好。
當我嘗試使用向量中的元素而不是連接在函數內部聲明的&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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.