원래는 문자열을 이렇게 빠르게 포스팅할 생각이 없었는데, rust로 알고리즘 문제 풀다가 문자열이 너무 이상해서, 공부 겸 먼저 올립니다.
문자열 타입
Rust에는 두 가지 타입의 문자열이 있다.
String과 &str이다.
String 특징
&str 특징
- &[char] 슬라이스
- UTF-8 보장
- 스택 영역의 데이터
문자열 타입 지정
fn main() {
let s = "ABCD";
println!("{}", s);
}
위와 같이 "ABCD"를 지정하는 경우, &str 타입으로 취급된다.
String 타입을 지정하고 싶은 경우 아래와 같이 만들면 된다.
fn main() {
let s = "ABCD".to_string();
let s = String::from("ABCD");
let s: String = "ABCD".into();
}
위 3가지 방법은 모두 String 타입을 가지게 된다.
2번째, 3번째 방법은 trait을 이용한 방법이다. 2
문자열 리터럴
문자열을 표현하는 방식은 아래와 같다.
fn main() {
let s = "ABCD\nEFG";
println!("{}", s);
let s = "ABCD
EFG";
println!("{}", s);
let s = r"ABCD\nEFG";
println!("{}", s);
let s = r#"AB"CD\nEFG"#;
println!("{}", s);
}
첫 번째 println!에서는
ABCD
EFG
가 출력된다.
두 번째도 첫 번째와 똑같이 출력된다.
세 번째는 문자열 앞에 r을 넣었는데 이것은 \n과 같은 문자를 그대로 출력하기 위해서 사용된다.
즉,
ABCD\nEFG
위의 문자열이 그대로 출력된다.
네 번째는 r 을 붙이고 문자열 앞뒤로 #을 붙였는데, 이는 문자열 내의 "(따옴표)들을 그대로 출력하기 위해서 사용된다.
즉,
AB"CD\nEFG
가 출력이 된다.
다른 언어를 공부하시는 분들은 이미 아시겠지만, 문자열 내에서 "(따옴표)를 표시하기 위해서는 첫 번째 방법에서 \"를 쓰면 "가 출력이 된다.
다만, Rust에서는 사용자 편의를 위해서 3번째와 4번째 방법을 추가로 제공하는 듯 보인다.
문자열 조작
앞서 말했듯, String의 경우 내용을 변경할 수 있다.
내용을 변경하는 방법은 다음과 같다.
fn main() {
let mut s = String::new();
s.push('A');
s.push_str("BCD");
s.remove(1);
let ch = s.pop().unwrap();
println!("{}", s);
println!("{}", ch);
}
변수 선언할 때, let mut을 사용하고 있음을 주의하라.
Rust는 기본적으로 불변 변수를 가진다.
push는 문자를, push_str는 문자열을 현재 문자열의 맨 뒤에 붙이는 역할을 한다.
"ABCD"
remove는 해당하는 인덱스의 문자를 제거하며,
"ACD"
pop은 문자열의 마지막 문자를 문자열에서 제거하며, 해당 문자를 반환한다.
"AC"
unwrap은 지금 단계에서는 무시하자!
결과적으로 첫 번째 출력문에서는 "AC"를 출력한다.
두 번째 출력문은 "D"를 출력한다.
'잡학(雜學)' 카테고리의 다른 글
소수 (0) | 2021.08.12 |
---|---|
Centos 7 잡학 (0) | 2021.07.20 |
Rust 2장 - 2. 기본 데이터 타입 (0) | 2021.06.17 |
Rust 2장 - 1. 변수와 상수 (0) | 2021.06.15 |
억지 기법 (0) | 2021.06.13 |