2016-09-11 2 views
0

녹을 배우려면 HackerRank 30 일 챌린지, 프로젝트 오일러 및 기타 프로그래밍 콘테스트와 같은 것들을보고 있습니다. 첫 번째 장애물은 한 줄의 표준 입력에서 여러 정수를 읽는 것입니다.한 줄의 표준 입력에서 여러 정수를 읽으려면 어떻게해야합니까?

C++에서 나는 편리하게 말할 수 있습니다 :

cin >> n >> m; 

을 어떻게 녹에서 관용구이해야합니까?

+2

이 http://meta.stackoverflow.com/questions/261592/ ([당신이 어떤 노력을했습니다 즉 것으로 예상 있기 때문에 stack-overflow-users/261593 # 261593)를 사용하여 문제를 해결할 수 있습니다. 현재와 ​​같이 귀하의 질문은 [다음과 같이] 보입니다 (http://odesk.ro/wp-content/uploads/2013/10/Quotes31.jpg). – Shepmaster

+1

관련 항목 : [기능 스타일을 사용하여 플로트 목록에 문자열을 파싱하려면 어떻게합니까?] (http://stackoverflow.com/questions/19507730/how-do-i-parse-a-string-to-a-list) 부동 소수점을 사용하는 함수형) – Shepmaster

+2

관련 항목 : [실패 할 경우 표준 입력에서 여러 int를 읽는 가장 쉬운 방법은 무엇입니까?] (http://stackoverflow.com/q/35860264/155423) – Shepmaster

답변

5

가장 좋은 방법은, 내가 아는 한, 그냥이 같은 정수로 사람들을지도 한 후 입력 라인을 분할하는 것입니다 :

use std::io; 

let mut line = String::new(); 
io::stdin().read_line(&mut line).expect("Failed to read line"); 

let inputs: Vec<u32> = line.split(" ") 
    .map(|x| x.parse().expect("Not an integer!")) 
    .collect(); 

// inputs is a Vec<u32> of the inputs. 

것은이 것 panic! 입력이 잘못된 경우주의하십시오; 이것을 피하려면 handle the result values properly을 사용해야합니다.

4

scan-rules 나무 상자 (docs)를 사용하면 이러한 종류의 스캔이 쉬워지고 (강력한 기능도 있습니다).

다음 예제 코드는 scan-rules 0.1.3 버전을 사용합니다 (cargo 스크립트로 파일을 직접 실행할 수 있음).

예제 프로그램은 공백으로 구분 된 두 개의 정수를 같은 줄에 받아들입니다.

// cargo-deps: scan-rules="^0.1" 

#[macro_use] 
extern crate scan_rules; 

fn main() { 
    let result = try_readln! { 
     (let n: u32, let m: u32) => (n, m) 
    }; 
    match result { 
     Ok((n, m)) => println!("I read n={}, m={}", n, m), 
     Err(e) => println!("Failed to parse input: {}", e), 
    } 
} 

테스트 실행 : 당신은 가능성이 downvotes을 받고

4 5 
I read n=4, m=5 

5 a 
Failed to parse input: scan error: syntax error: expected integer, at offset: 2 
관련 문제