■ &str 타입의 replace 메소드를 사용해 문자열을 변경하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string_slice : &str = "디버그 모드로 실행했습니다."; let string : String = string_slice.replace("디버그", "릴리즈"); println!("{}\n{}", string_slice, string); /* 디버그 모드로 실행했습니다. 릴리즈 모드로 실행했습니다. */ |
■ &str 타입의 find 메소드를 사용해 문자열을 찾는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string_slice : &str = "갑자기 한식이 퍼진 진짜 이유"; match string_slice.find("한식") { Some(index) => println!("한식 : {}B", index), None => println!("해당 문자열이 없습니다 : \"한식\"") }; match string_slice.find("양식") { Some(index) => println!("양식 : {}B", index), None => println!("해당 문자열이 없습니다 : \"양식\"") }; |
■ Vec<T> 구조체의 슬라이스 기능을 사용해 부분 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::str; let string_slice : &str = "지혜는 무기보다 가치가 있다."; let character_vector : Vec<char> = string_slice.chars().collect(); let character_array : &[char] = &character_vector[4..=5]; let subsidary_string : String = character_array.into_iter().collect(); println!("{}", subsidary_string); |
■ Chars 구조체의 take 메소드를 사용해 부문 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string_slice : &str = "지혜는 무기보다 가치가 있다."; let characters : str::Chars = string_slice.chars(); let string : String = characters.take(2).collect(); println!("{}", string); |
■ Chars 구조체의 enumerate 메소드를 사용해 문자열을 나열하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
use std::str; let string_slice : &str = "1234567890"; let characters : str::Chars = string_slice.chars(); for (index, character) in characters.enumerate() { println!("{}, {}", index, character); } /* 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7, 8 8, 9 9, 0 */ |
■ &str 타입의 chars 메소드를 사용해 부분 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
let string_slice : &str = "단군왕검이 BC2333년에 고조선을 건국했다."; let mut string1 : String = String::new(); for (index, character) in string_slice.chars().enumerate() { if index < 4 { string1.push(character); continue; } break; } println!("{}", string1); let mut string2 : String = String::new(); for (index, character) in string_slice.chars().enumerate() { if 6 <= index && index <= 11 { string2.push(character); } } println!("{}", string2); /* 단군왕검 BC2333 */ |
■ &str 타입의 bytes 메소드를 사용해 문자열을 이진 에디터 형태로 출력하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
fn dump_hexadecimal_value(source : &str) { for (index, byte_value) in source.bytes().enumerate() { if index % 16 == 0 { print!("{:08x}|", index); } if index % 4 == 3 { print!("{:02x}|", byte_value); } else { print!("{:02x} ", byte_value); } if index % 16 == 15 { println!(""); } } println!(""); } fn main() { dump_hexadecimal_value("외모는 신이 결정하고 옷은 재력이 결정하고 품성은 의지가 결정한다."); } /* 00000000|ec 99 b8 eb|aa a8 eb 8a|94 20 ec 8b|a0 ec 9d b4| 00000010|20 ea b2 b0|ec a0 95 ed|95 98 ea b3|a0 20 ec 98| 00000020|b7 ec 9d 80|20 ec 9e ac|eb a0 a5 ec|9d b4 20 ea| 00000030|b2 b0 ec a0|95 ed 95 98|ea b3 a0 20|ed 92 88 ec| 00000040|84 b1 ec 9d|80 20 ec 9d|98 ec a7 80|ea b0 80 20| 00000050|ea b2 b0 ec|a0 95 ed 95|9c eb 8b a4|2e */ |
■ 'static 키워드를 사용해 전역 라이프타임을 설정하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
fn echo(source : &'static str) { println!("{}", source); } fn main() { echo("테스트 문자열 1입니다."); echo("테스트 문자열 2입니다."); } |
■ Vec<T> 구조체의 len 메소드를 사용해 벡터 길이를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let vector : Vec<i32> = vec![10, 20, 30, 40, 50, 60, 70, 80, 90, 100]; println!("{}", vector.len()); |
■ Vec<T> 구조체의 iter 메소드를 사용해 반복자를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let vector : Vec<i32> = vec![10, 20, 30, 40, 50, 60, 70, 80, 90, 100]; for value in vector.iter() { println!("{}", value); } |
■ &str 타입의 chars 메소드를 사용해 문자열을 1문자씩 출력하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
let string_slice : &str = "테스트 문자열입니다."; for character in string_slice.chars() { print!("[{}]", character); } println!(""); println!("글자 수 : {}자", string_slice.chars().count()); let character_vector : Vec<char> = string_slice.chars().collect(); println!("Vec<char> : {:?}", character_vector); for character in character_vector.iter() { print!("({})", character); } println!(""); println!("글자 수 : {}자", character_vector.len()); /* [테][스][트][ ][문][자][열][입][니][다][.] 글자 수 : 11자 Vec<char> : ['테', '스', '트', ' ', '문', '자', '열', '입', '니', '다', '.'] (테)(스)(트)( )(문)(자)(열)(입)(니)(다)(.) 글자 수 : 11자 */ |
■ &str 타입의 len 메소드를 사용해 바이트 단위 길이를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string_slice : &str = "테스트 문자열입니다."; println!("{}", string_slice.len()); |
■ &str 타입의 bytes 메소드를 사용해 문자열을 1바이트씩 출력하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string_slice : &str = "테스트 문자열입니다."; for byte_value in string_slice.bytes() { print!("{:2x} ", byte_value); } /* ed 85 8c ec 8a a4 ed 8a b8 20 eb ac b8 ec 9e 90 ec 97 b4 ec 9e 85 eb 8b 88 eb 8b a4 2e */ |
■ String 구조체의 as_str 메소드를 사용해 &str 객체로 변환하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string : String = String::from("테스트 문자열입니다."); let string_slice : &str = string.as_str(); println!("{}\n{}", string, string_slice); /* 테스트 문자열입니다. 테스트 문자열입니다. */ |
■ println! 매크로의 포맷 문자열에서 &str 객체의 주소 출력을 설정하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string1 : String = String::from("테스트 문자열입니다."); let string_slice1 : &str = &string1; let string_slice2 : &str = string1.as_str(); println!("{}\n{}\n{}", string1, string_slice1, string_slice2); println!("{:p}\n{:p}", string_slice1, string_slice2); |
■ String 구조체에 & 참조자를 사용해 &str 객체로 변환하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string : String = String::from("테스트 문자열입니다."); let string_slice : &str = &string; println!("{}\n{}", string, string_slice); /* 테스트 문자열입니다. 테스트 문자열입니다. */ |
■ &str 타입의 to_string 메소드를 사용해 String 객체로 변환하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string_slice : &str = "테스트 문자열입니다."; let string : String = string_slice.to_string(); println!("{}\n{}", string_slice, string); /* 테스트 문자열입니다. 테스트 문자열입니다. */ |
■ &str 타입에 대한 슬라이스를 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let source1 : &str = "abcdefg"; println!("{}", &source1[0..1]); // a let source2 : &str = "안녕하세요"; let character1 : &str = &source2[..3]; println!("{}", character1); // 안 let character2 : &str = &source2[6..9]; println!("{}", character2); // 하 |
■ &str 타입의 chars 메소드를 사용해 문자열에서 문자를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string : &str = "안녕하세요"; let character1 : char = string.chars().nth(0).unwrap(); println!("{}", character1); // 안 let character2 : char = string.chars().nth(2).unwrap(); println!("{}", character2); // 하 |
■ struct 키워드로 구조체를 사용해 체질량 지수(Body Mass Index)를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
struct Body { weight : f64, height : f64 } fn calculate_bmi(body : &Body) -> f64 { let height : f64 = body.height / 100.0; return body.weight / height.powf(2.0); } fn main() { let person1: Body = Body { weight : 80.0, height : 165.0 }; let person2: Body = Body { weight : 65.0, height : 170.0 }; println!("사람 1 = {:.1}", calculate_bmi(&person1)); println!("사람 2 = {:.1}", calculate_bmi(&person2)); } |
■ struct 키워드를 사용해 BMI 판정표를 만들고 체질량 지수(Body Mass Index)를 판정하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
use std::io; struct BMIRange { minimum : f64, maximum : f64, label : &'static str } fn input(prompt : &str) -> f64 { println!("{}", prompt); let mut source: String = String::new(); io::stdin().read_line(&mut source).expect("입력 에러"); return source.trim().parse().expect("숫자 변환 에러"); } fn main() { let height_cm : f64 = input("키(cm) : "); let weight : f64 = input("몸무게(kg) : "); let height : f64 = height_cm / 100.0; let bmi : f64 = weight / height.powf(2.0); let bmi_range_list : Vec<BMIRange> = vec! [ BMIRange { minimum : 0.0, maximum : 18.5, label : "저체중" }, BMIRange { minimum : 18.5, maximum : 23.0, label : "정상" }, BMIRange { minimum : 23.0, maximum : 25.0, label : "비만전단계" }, BMIRange { minimum : 25.0, maximum : 30.0, label : "1단계 비만" }, BMIRange { minimum : 30.0, maximum : 35.0, label : "2단계 비만" }, BMIRange { minimum : 35.0, maximum : 99.0, label : "3단계 비만" } ]; let mut result: &str = "계산 불가"; for range in bmi_range_list { if range.minimum <= bmi && bmi < range.maximum { result = range.label; break; } } println!("BMI = {:.1}, 비만도 = {}", bmi, result); } |
■ struct 키워드룰 사용해 구조체 객체를 만드는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
struct Car { model : i32, cc : i32, color : i32 } fn main() { let car1 : Car = Car { model : 3001, cc : 1500, color : 0xff0000 }; let car2 : Car = Car { model : 3002, cc : 1200, color : 0x0000ff }; println!("car1 : {}, {}cc, {:06x}", car1.model, car1.cc, car1.color); println!("car2 : {}, {}cc, {:06x}", car2.model, car2.cc, car2.color); } /* car1 : 3001, 1500cc, ff0000 car2 : 3002, 1200cc, 0000ff */ |
■ 슬라이스 데이터를 함수 인자로 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
fn get_summary_value(item_slice : &[i64]) -> i64 { let mut total_value : i64 = 0; for item in item_slice { total_value += item; } return total_value; } fn main() { let integer_arrary : [i64; 10] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; println!("integer array = {}", get_summary_value(&integer_arrary[..])); println!("{:?}", integer_arrary); let integer_vector : Vec<i64> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; println!("integer vector = {}", get_summary_value(&integer_vector[..])); println!("{:?}", integer_vector); } |
■ 숫자 배열에 대한 슬라이스를 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let integer_array : [i32; 6] = [0, 1, 2, 3, 4, 5]; let integer_array_slice : &[i32] = &integer_array[0..3]; println!("{:?}", integer_array_slice); // [0, 1, 2] println!("{:?}", &integer_array[3..5]); // [3, 4] println!("{:?}", &integer_array[4..6]); // [4, 5] |
■ String 구조체에 대한 슬라이스를 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string : String = String::from("test_project"); let slice : &str = &string[0..4]; println!("{}", slice); /* test */ |