BETA

RustBook(8,2)写経

投稿日:2019-10-31
最終更新:2019-10-31

ch08-02-strings

fn main() {  
     let mut _s = String::new();  

     let data = "initial contents";  
     // 文字列リテラル  
     let s = data.to_string();  
     // String  
     // 以下と等価  
     // let s = String::from("initail contents");  
     println!("data: {}", data);  
     println!("s: {}", s);  

     let hello = String::from("こんにちは");  
     println!("hello: {}", hello);  

    let mut s1 = String::from("foo");  
    let s2 = "bar";  
    s1.push_str(s2);  
    println!("s1: {}", s1);  
    println!("s2: {}", s2);  

    let s1 = String::from("Hello, ");  
    let s2 = String::from("world!");  
    let s3 = s1 + &s2;  
    // +のシグネチャのイメージ:  
    //  fn add(self, &str) -> String {  
    //  第1引数:self  
    //   参照(&)ではないので、所有権を与えている。(s1はaddの後、有効でなくなる)  
    //   つまり、s1に&s2の中身を加えた結果の所有権を返している。  
    //  第2引数: &str  
    //   第2引数はString参照(&String)を与えており、シグネチャの&strと一致しない。  
    //  そのため、コンパイラは*参照外し型強制*を使用しており、&strを&str[..]に変換している。  
    println!("+ -> s3: {}", s3);  

    let s1 = String::from("Hello, ");  
    let s2 = String::from("world!");  
    let s3 = format!("{}{}", s1, s2);  
    // format!を利用した場合、s1,s2の所有権は奪わない。  
    println!("format -> s3: {}", s3);  

    // let s1 = String::from("hello");  
    // let h = s1[0]  
    // -> パニック  
    // Rustでは、文字列に添え字でアクセスすることはできない。  
    // 文字列を数えるために、Unicodeのスカラー値を数え、表記はUnicodeのスカラー値に一致しないため。  

    for c in "こんにちは".chars() {  
        println!("{}", c);  
    }  
    // 文字列中の各文字にアクセスしたい場合はchars()を利用する。  
}  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

調べたことのメモ 記事とログの使い分け - 記事 -> 実験したもの・調べてまとめたもの - ログ -> ただの写経

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう