[rust] Rust에서 문자열을 int로 변환 하시겠습니까?

참고 :이 질문에는 더 이상 사용되지 않는 1.0 이전 코드가 포함되어 있습니다! 대답은 맞습니다.

을 변환하려면 strint녹, 나는이 작업을 수행 할 수 있습니다 :

let my_int = from_str::<int>(my_str);

나는 변환하는 방법을 알고있는 유일한 방법 String으로는 int그것의 조각을 얻을 후 사용하는 것 from_str과 같이 그 위에 :

let my_int = from_str::<int>(my_string.as_slice());

직접 변환하는 방법이 String로는 int?



답변

str::parse::<T>()메소드를 사용하여 int로 직접 변환 할 수 있습니다 .

let my_string = "27".to_string();  // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<i32>().unwrap();

::<>위와 같이 turbofish 연산자 ( )를 사용하거나 명시적인 형식 주석을 통해 구문 분석 할 형식을 지정할 수 있습니다 .

let my_int: i32 = my_string.parse().unwrap();

주석에서 언급했듯이 parse()a를 반환합니다 Result. 이 결과는 Err문자열을 지정된 유형으로 구문 분석 할 수없는 경우입니다 (예 : 문자열 "peter"을로 구문 분석 할 수 없음 i32).


답변

let my_u8: u8 = "42".parse::<u8>().unwrap();
let my_u32: u32 = "42".parse::<u32>().unwrap();

// or, to be safe, match the `Err`
match "foobar".parse::<i32>() {
  Ok(n) => do_something_with(n),
  Err(e) => weep_and_moan(),
}

str::parse::<u32>a Result<u32, core::num::ParseIntError>Result::unwrap“결과의 래핑 해제 Ok, 값이 ‘인 Err경우 Err‘ 패닉 메시지가 포함 된 패닉 메시지가 포함 된 [또는] 패닉 콘텐츠를 생성합니다 .”

str::parse일반 함수 이므로 꺾쇠 괄호 안에있는 유형입니다.


답변

에서 문자열을 가져 오면 stdin().read_line먼저 다듬어야합니다.

let my_num: i32 = my_num.trim().parse()
   .expect("please give me correct string number!");


답변

최근 밤마다 다음과 같이 할 수 있습니다.

let my_int = from_str::<int>(&*my_string);

여기서 일어나는 일은 String이제로 참조 해제 될 수 있다는 것 str입니다. 그러나이 함수는를 원 &str하므로 다시 빌려야합니다. 참고로,이 특정 패턴 ( &*)을 “교차 차입”이라고합니다.


답변

FromStr특성의 from_str방법을 사용할 수 있습니다 i32.

let my_num = i32::from_str("9").unwrap_or(0);


답변

음 … 아니. 왜 있어야합니까? 더 이상 필요하지 않으면 문자열을 폐기하십시오.

&strString문자열은 소유자가 아닌 원본 데이터에 대한보기 일 뿐이므로 문자열 만 읽어야 할 때보 다 유용합니다 . 보다 쉽게 ​​전달할 수 있으며 String복사 가능하므로 호출 된 메소드에서 사용되지 않습니다. 이와 관련하여 더 일반적입니다.가있는 경우 예상되는 String곳으로 전달할 수 &str있지만 가지고있는 경우 새로운 할당을 &str기대하는 함수에만 전달할 수 있습니다 String.

이 두 가지의 차이점과 공식 문자열 안내서 에서이 두 가지를 언제 사용해야하는지 더 자세히 알 수 있습니다 .


답변

따라서 기본적으로 문자열을 정수로 변환하려고합니다! 여기에 내가 주로 사용하는 것이 있으며 공식 문서에도 언급되어 있습니다.

fn main() {

    let char = "23";
    let char : i32 = char.trim().parse().unwrap();
    println!("{}", char + 1);

}

이것은 String과 & str 모두에서 작동합니다. 이것이 도움이되기를 바랍니다.