본문 바로가기

개발 이야기/Rust 언어 이야기

string을 입력받아 거꾸로 string을 출력하는 예

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]]"이어야 한다는 사실을

     확인하는데 어려움이 있었습니다.

 

일단 이렇게 코딩하니 원하는 대로 잘 동작은 합니다.