17.3 Strings

Rust에는 두 타입의 string이 있다: String&str.

String은 바이트들의 벡터로 저장되고(Vec<u8>) 검증된 UTF-8 형태라고 보장하지 않는다. String은 힙에 할당되고, 확장 가능하지만 null로 끝을 맺지 않는다.

&str은 조각으로(&[u8]) 항상 검증된 UTF-8 형태를 지칭하고, &[T]Vec<T>로 보이는 것처럼 String으로 사용되 보여줄 수 있다.

fn main() {
    // (모든 타입 주해는 꼭 필요하진 않다)
    // 일기 전용 메모리에 할당된 string 참조. 
    let pangram: &'static str = "the quick brown fox jumps over the lazy dog";
    println!("Pangram: {}", pangram);

    // 단어들을 역순으로 나열, 새 string이 할당되지 않는다.
    println!("Words in reverse");
    for word in pangram.split_whitespace().rev() {
        println!("> {}", word);
    }

    // 문자들을 벡터로 복사하고, 정렬 및 중복 삭제.
    let mut chars: Vec<char> = pangram.chars().collect();
    chars.sort();
    chars.dedup();

    // 비어있으면서 확장 가능한 `String` 생성.
    let mut string = String::new();
    for c in chars {
        // char를 string의 끝에 삽입
        string.push(c);
        // string의 끝에 string 삽입 
        string.push_str(", ");
    }

    // 다듬어진 string은 원본의 조각이고, 새 할당은 되지 않았다.
    let chars_to_trim: &[char] = &[' ', ','];
    let trimmed_str: &str = string.trim_matches(chars_to_trim);
    println!("Used characters: {}", trimmed_str);

    // string 힙 할당.
    let alice = String::from("I like dogs");
    // 수정된 string을 보관하기 위한 새 메모리 할당.
    let bob: String = alice.replace("dog", "cat");

    println!("Alice says: {}", alice);
    println!("Bob says: {}", bob);
}

str/String 메소드는 아래에서 더 찾아볼 수 있다. std::strstd::string 모듈.

results matching ""

    No results matching ""