簡體   English   中英

當在循環內連接 Vec<&str> 元素時字符串覆蓋 - rust

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM