문자열 슬라이스 생성하기
Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 55번째.
이제 String과 &str의 차이점을 이해했으므로, 기존 문자열에서 문자열 슬라이스(string slice)를 생성하는 방법을 배워보겠습니다. String에서 &str을 생성하는 두 가지 주요 방법이 있습니다.
가장 간단한 방법은 String과 함께 참조 연산자 &를 사용하는 것입니다. 이것은 전체 문자열을 참조하는 슬라이스를 생성합니다:
let my_string = String::from("Hello World");
let slice: &str = &my_string; // 이것은 전체 문자열의 슬라이스를 생성합니다범위 구문을 사용하여 문자열의 특정 부분에 대한 슬라이스를 만들 수도 있습니다. 형식은 &string[start..end]이며, 여기서 start는 시작 인덱스이고 end는 포함하려는 마지막 문자보다 하나 더 큰 인덱스입니다. 이 인덱스들은 usize 타입으로, 인덱싱과 크기 계산에 사용되는 Rust의 부호 없는 정수 타입입니다. 문자열 인덱스는 결코 음수가 될 수 없으므로 0 또는 양수만 가능하며 이는 타당합니다:
let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // "Hello"를 얻게 됩니다
let second_word = &my_string[6..11]; // "World"를 얻게 됩니다챌린지
쉬움두 개의 입력을 받게 됩니다. 첫 번째 입력은 전체 문장이고, 두 번째 입력은 슬라이스를 생성하기 위한 시작 및 끝 인덱스를 나타내는 공백으로 구분된 두 개의 숫자입니다. 첫 번째 입력으로부터 String을 생성한 다음, 두 인덱스로 지정된 범위를 사용하여 문자열 슬라이스를 생성하세요. 첫 번째 줄에는 원본 문자열을 출력하고, 두 번째 줄에는 추출된 슬라이스를 출력하세요.
요구 사항:
- 첫 번째 입력(전체 문장)을 읽고 공백을 제거(trim)합니다.
- 이 입력으로부터
String을 생성합니다. - 두 번째 입력(공백으로 구분된 두 숫자)을 읽고 공백을 제거(trim)합니다.
- 두 번째 입력을 공백으로 분할하여 시작 및 끝 인덱스를 가져옵니다.
- 두 인덱스를 모두
usize로 파싱합니다. - 범위 구문
&string[start..end]을 사용하여 문자열 슬라이스를 생성합니다. - 원본 문자열을 출력합니다.
- 추출된 슬라이스를 출력합니다.
입력:
- 첫 번째 줄: 문장 (예:
Hello World) - 두 번째 줄: 공백으로 구분된 두 숫자 (예:
0 5)
출력:
- 첫 번째 줄: 원본 문자열
- 두 번째 줄: 추출된 슬라이스
치트 시트
String에서 &str을 생성하는 두 가지 주요 방법이 있습니다.
참조 연산자 &를 사용하여 전체 문자열의 슬라이스를 생성합니다:
let my_string = String::from("Hello World");
let slice: &str = &my_string;범위 구문 &string[start..end]을 사용하여 특정 부분의 슬라이스를 생성합니다:
let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // "Hello"
let second_word = &my_string[6..11]; // "World"start 인덱스는 포함(inclusive)되고 end 인덱스는 제외(exclusive, 마지막 문자 다음 위치)됩니다.
직접 해보기
use std::io;
fn main() {
// 첫 번째 입력을 읽습니다 (전체 문장)
let mut sentence = String::new();
io::stdin().read_line(&mut sentence).expect("Failed to read line");
let sentence = sentence.trim();
// 두 번째 입력을 읽습니다 (공백으로 구분된 두 숫자)
let mut indices = String::new();
io::stdin().read_line(&mut indices).expect("Failed to read line");
let indices = indices.trim();
// TODO: 아래에 코드를 작성하세요
// 인덱스를 파싱하고 문자열 슬라이스를 생성합니다
// 원본 문자열과 슬라이스를 출력합니다
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.