[C++] stoi 문자열에서 숫자로 형 변환 방법 예제모음 string to int

코테를 준비하면서 문제를 풀 때 등 일반적으로 C++ 로 코딩하면서 가장 많이 접하게 되는 작업 중 하나가 문자열(string)과 숫자(int)사이에서의 형 변환이 아닐까 싶습니다.

stringstream을 사용한다거나 루프를 사용해서 형 변환을 하는 방법도 있지만, 본 포스팅에서는 함수를 사용하여 string형을 숫자형으로 변환하는 방법에 대해 다루어 보겠습니다.

숫자형에서 string형으로 변환하는 방법은 다음 포스팅을 참고해주세요.

먼저 함수들을 사용하기 위해 string 헤더파일을 잊지말고 include 해주세요.

#include <string>

stoi, stol, stoll, stoul, stoull 함수 구문

다음 함수들은 string 문자열을 해당 정수 숫자형으로 변환합니다.

int stoi (const string&  str, size_t* idx = 0, int base = 10);
long stol (const string&  str, size_t* idx = 0, int base = 10);
long long stoll (const string&  str, size_t* idx = 0, int base = 10);
unsigned long stoul (const string&  str, size_t* idx = 0, int base = 10);
unsigned long long stoull (const string&  str, size_t* idx = 0, int base = 10);

매개변수

  1. (필수사항) const string& str: 숫자로 변환하고 싶은 문자열입니다.
  2. (선택사항) size_t* idx = 0: 문자열에서 숫자 다음으로 나오는 문자 중 숫자가 아니기 시작한 색인(index)을 가리키는 포인터입니다.
  3. (선택사항) int base = 10: str의 진수를 의미합니다. str 문자열이 의미하는 숫자의 진수가 무엇인지를 표현하는 것입니다. default는 10진수입니다.

반환값

  1. stoi: int형 정수를 반환합니다.
  2. stol: long형 정수를 반환합니다.
  3. stoll: long long형 정수를 반환합니다.
  4. stoul: unsigned long형 정수를 반환합니다.
  5. stoull: unsigned long long형 정수를 반환합니다.

stod, stof, stold 함수 구문

다음 함수들은 string 문자열을 해당 실수 숫자형으로 변환합니다.

double stod (const string&  str, size_t* idx = 0);
float stof (const string&  str, size_t* idx = 0);
long double stold (const string&  str, size_t* idx = 0);

매개변수

  1. (필수사항) const string& str: 숫자로 변환하고 싶은 문자열입니다.
  2. (선택사항) size_t* idx = 0: 문자열에서 숫자 다음으로 나오는 문자 중 숫자가 아니기 시작한 색인(index)을 가리키는 포인터입니다.

반환값

  1. stod: double형 실수를 반환합니다.
  2. stof: float형 실수를 반환합니다.
  3. stold: long double형 실수를 반환합니다.

string형 -> 정수 숫자형 변환 예제

다음 예제들은 stoi() 함수를 사용하여 string을 int로 바꿨습니다. 다른 정수 숫자형으로 변환해주는 stol, stoll, stoul, stoull 함수들 모두 동일한 방식으로 사용할 수 있습니다.

#include <cstring>
#include <iostream>

using namespace std;

int main() {
  string s_num = "1234";

  int i_num = stoi(s_num);
  
  cout << "int로 변환: " << i_num << endl;
}

결과값:

string to int

// idx 매개변수 활용
#include <cstring>
#include <iostream>

using namespace std;

int main() {
  string s_num = "1234abc";

  size_t index;

  int i_num = stoi(s_num, &index);

  cout << "int로 변환: " << i_num << endl;

  cout << "숫자가 아닌 문자의 시작 색인: " << index << endl;
}

결과값:

string to int

색인(index) 4인 ‘a’ 부터 숫자가 아닙니다. idx 매개변수를 활용하여 문자열 안에서 숫자가 아니기 시작한 위치를 알아낼 수 있습니다.

// base 매개변수 활용
#include <cstring>
#include <iostream>

using namespace std;

int main() {
  string s_num = "1234";

  int i_num = stoi(s_num, nullptr, 8);

  cout << "8진수 int로 변환: " << i_num << endl;
}

결과값:

string to int

base 매개변수로 8을 넣어주었기 때문에 10진수 “1234”를 8진수 “668”로 변환 되었습니다.

세번째 매개변수인 base를 이용하면서 idx 매개변수는 이용하지 않을거면 nullptr를 두번째 매개변수로 넣어주어야 합니다.

string형 -> 실수 숫자형 변환 예제

다음 예제들은 stod() 함수를 사용하여 string을 double로 바꿨습니다. 다른 실수 숫자형으로 변환해주는 stof, stold 함수들 모두 동일한 방식으로 사용할 수 있습니다.

#include <cstring>
#include <iostream>

using namespace std;

int main() {
  string s_num = "1234.56";

  double d_num = stod(s_num);

  cout << "double로 변환: " << d_num << endl;
}

결과값:

string to double

// idx 매개변수 활용
#include <cstring>
#include <iostream>

using namespace std;

int main() {
  string s_num = "1234.56abc";

  size_t index;

  double d_num = stod(s_num, &index);

  cout << "double로 변환: " << d_num << endl;

  cout << "숫자가 아닌 문자의 시작 색인: " << index << endl;
}

결과값:

string to double

색인(index) 7인 ‘a’ 부터 숫자가 아닙니다. idx 매개변수를 활용하여 문자열 안에서 숫자가 아니기 시작한 위치를 알아낼 수 있습니다.

마무리

본 포스팅에서 다룬 함수들을 호출함으로서 string 문자열을 int, long, double, float, long double, long long, unsigned long 또는 unsigned long long 숫자형으로 변환할 수 있습니다.

이미 눈치 채셨겠지만 함수명들은 간단한게 “String TO” + Integer” 등 string 문자열을 어떤 숫자형으로 변환하냐에 따라 축약되어 지어졌습니다.

따라서 무엇을 사용해야 할지 헷갈리신다면 함수명에서 “sto” 다음에 어떤 문자가 써 있는지만 확인해주시면 쉽게 구분이 가능합니다.

답글 남기기