본문 바로가기
프로그래밍 언어/C++

C++ stoi 사용법 정리

by Jo_Wick 2025. 9. 30.
반응형

std::stoi문자열을 정수(int)로 변환하는 기능을 한다. C 언어의 atoi와 비슷하지만 에러 처리세부 제어가 가능하다는 점에서 훨씬 안전하다.

 

int stoi(const std::string& str, size_t* pos = 0, int base = 10);

매개변수

  • str : 변환할 문자열
  • pos : 변환이 끝난 위치를 알려주는 포인터 (옵션)
  • base : 진법 (2 ~ 36, 기본값 10)

반환값

  • 변환된 int 값

예외

  • std::invalid_argument : 변환할 수 없는 경우 (숫자가 전혀 없음)
  • std::out_of_range : 변환 결과가 int 범위를 넘어가는 경우

 

예시

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1 = "12345";
    string s2 = "-42";
    string s3 = "1010";

    int n1 = stoi(s1);        // 12345
    int n2 = stoi(s2);        // -42
    int n3 = stoi(s3, nullptr, 2); // 2진수로 해석 → 10

    cout << n1 << ", " << n2 << ", " << n3 << endl; // 12345, -42, 10
}

 

pos 활용 (문자열 중간까지 변환)

string s = "123abc";
size_t idx;
int num = stoi(s, &idx);

cout << num << endl; // 123
cout << idx << endl; // 3 ("123" 이후 문자가 시작되는 위치)

 

예외 처리

try {
    int a = stoi("abc"); // 숫자 없음 → invalid_argument
} catch (const invalid_argument& e) {
    cout << "invalid_argument: " << e.what() << endl;
}

try {
    int b = stoi("9999999999999999999999"); // 너무 큼 → out_of_range
} catch (const out_of_range& e) {
    cout << "out_of_range: " << e.what() << endl;
}

 

 

여러 타입 변환 함수

  • stoi → int
  • stol → long
  • stoll → long long
  • stoul → unsigned long
  • stoull→ unsigned long long
  • stof → float
  • stod → double
  • stold → long double
반응형

댓글