2016-10-13 2 views
0

C++에서 std::stoi()을 사용하여 문자열 입력이 int로 변환 가능한지 확인하는 방법이 있습니까?
C++에서 std :: stoi()를 사용하여 int 입력의 유효성을 검사하는 방법은 무엇입니까?

작동하지 않습니다 예를 (? 예를 들어, 나는 invalid_argument 예외가 발생합니다 있는지 확인할 수 있습니다), 그러나 희망 내가 할 노력하고있어 설명 :

string response; 
    cout << prompt; 

    if (std::stoi(response) throws invalid_argument) { //Something like this 
     return std::stoi(response); 
    } 
    else { 
     badInput = true; 
     cout << "Invalid input. Please try again!\n"; 
    } 

연구 :
문자열이 int인지 확인하는 몇 가지 방법을 찾았지만 아직 찾을 수 없었던 std::stoi()을 사용하여 문자열을 확인하는 방법이 필요합니다.

+0

http://stackoverflow.com/search?q=strtol –

+0

'response'의 유형은 무엇입니까? 우리가 스스로 점검 할 수 있도록 완전한 모범을 보여줄 수 있습니까? http://stackoverflow.com/help/mcve – Lanting

+1

'std :: stoi' 함수에 대한 문서를 읽으려고 했습니까? – davmac

답변

1

당신은 예외를 catch해야합니다

응답을 가정하는 것은 표준 : : 문자열, 의사 코드로 다음은, 그것은 당신에게 그것이 작동되도록하는 방법의 아이디어를 줄 것이다 치료 그것이 던져 질지 여부를 미리 결정하기보다는.

string response; 
cin >> response; 

try { 
    return std::stoi(response); 
} 
catch (...) { 
    badInput = true; 
    cout << "Invalid input. Please try again!\n"; 
} 
0

표준 : stoi 가능한 한 많이 변환하고 변환하는 것이없는 경우에만 예외가 발생합니다. 그러나 std :: stoi는 시작 인덱스를 나타내는 포인터 매개 변수를 허용하며,이 인덱스는 변환을 종료 한 문자로 업데이트됩니다. See MSDN stoi docs here.

sti를 사용하여 시작 인덱스로 0을 전달한 다음 반환 된 인덱스가 문자열의 전체 길이와 동일한 지 확인하여 테스트 할 수 있습니다. 이 슬로우되면

std::size_t index = 0; 
auto result = std::stoi(response, &index); 
if(index == response.length()){ 
    // successful conversion 
    return result; 
} 
else{ 
    // something in the string stopped the conversion, at index 
} 
+0

"시작 색인으로 0을 전달하여 테스트하려면 stoi를 사용할 수 있습니다."- "시작 색인"으로 아무 것도 전달하지 않습니다. 첫 번째 변환되지 않은 문자의 색인 (또는 문자열의 끝)은 사용자가 입력 한 포인터의 _ 저장되어 있습니다.그 포인터가 미리 가리키고있는 것은 함수에 의해 검사되지 않는다. – davmac

관련 문제