728x90
rust에서 string입력을 받아서 이를 반대로 출력하는 예제인데,
이게 까다롭습니다.
문제는,
터미널에서 문자열을 입력 받아서 그 문자열을 역순으로 출력하세요.
:=> 예를 들어,
터미널에서 "abbd" 를 입력 받았으면 "dbba"를 출력하세요.
이를 완성한 코드는 아래와 같습니다.
use std::io;
use std::str;
fn main() {
loop {
println!("Please input your string.");
let mut instr = String::new();
io::stdin().read_line(&mut instr)
.expect("Failed to read line");
print!("Reversed string is: ");
//let mut len = str.len() as usize;
let bytes = instr.as_bytes();
let mut len = bytes.len();
while len != 0 {
if let Ok(s) = str::from_utf8(&[bytes[len-1]]) { // byte 배열의 char 값을 string을 출력
print!("{}", s);
}
len = len - 1;
}
println!("\n");
}
}
여기서
C언어라면 string의 length를 구해서 array처럼 변환하여 len에서 -1씩 하면서
array의 index가 0 이 될 때까지 프린트 하면 됩니다.
위 코드도 비슷한 원리로 구현을 했는데,
일단 입력받은 string을 byte array로 변환할 때는 아래와 같이,
:=> let bytes = instr.as_bytes();
그 다음 이 array인 bytes의 index를 이용하여 출력하는데
좀 애를 먹었습니다.
이 예에서는 아래와 같은 코드로 구현했습니다.
:=> str::from_utf8(&[bytes[len-1]])
우선 from_utf8() 을 사용해야한다는 것을 검색을 통해 알아 냈고
그 다음 이 method의 ()안에 type이 "&[bytes[len-1]]"이어야 한다는 사실을
확인하는데 어려움이 있었습니다.
일단 이렇게 코딩하니 원하는 대로 잘 동작은 합니다.
728x90
'개발 이야기 > Rust 언어 이야기' 카테고리의 다른 글
Rust - string conversion 관련 예제 코드 (0) | 2021.05.03 |
---|---|
rust 에서 print()의 format 관련 내용 (0) | 2021.04.30 |
rust 언어를 배우기 쉬운 곳 (0) | 2021.04.28 |
Redox OS, "레독스OS" 라고 Rust로 작성된 OS (0) | 2021.04.22 |
Rust를 WebAssembly로 컴파일하기 (0) | 2021.04.21 |