관리 메뉴

JIE0025

[ C++ ] 문자열을 숫자로 (stoi, stof, stol, stod) 본문

기타 학습/Language

[ C++ ] 문자열을 숫자로 (stoi, stof, stol, stod)

Kangjieun11 2022. 5. 19. 21:04
728x90

string 클래스를 숫자로 변경해주는 함수가 있다. 

(C++ 11부터 사용가능)

 

가장 많이 사용하는 string to 어쩌구는 바로 아래의 네개!

 

stoi : string to int

 

stof : string to float

 

stol : string to long

 

stod : string to double 

 

 

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

const string &str : 변경할 문자열 >> 문자열 복사 비용 안들도록 &이용, 함수 내부에서 변경 불가능 하도록 const사용)

size_t* idx = 0 : 숫자가 아닌부분까지 포인터를 걸러준다는 친구... >> 문자열에 숫자만 있다는 보장이 없고, 문자로 인해 숫자가 끊겨있을 것을 대비한 것 같다. int base =10 : 10진수라는 뜻 >> 다른 진수 사용하고 싶으면 설정하면 된다. 

string ss 에 만약 "0x32" 가 있었을 경우 16으로 바꿔주면 됨!

stoi(ss, nullptr, 16);

 

 

 

예제

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

int main() {
	
	string s_i = "111";
	string s_l = "1122334455";
	string s_f = "3.14";
	string s_d = "5.5555";

	int i = stoi(s_i);
	long int li = stol(s_l);
	float f = stof(s_f);
	double d = stod(s_d);

	//cout << i << endl;
	//cout << li << endl;
	//cout << f << endl;
	//cout << d << endl;


	string s1 = "11DataTest22";
	int n1 = stoi(s1);
	cout << n1 << endl;  //11

	size_t size;
	int n2 = stoi(s1, &size);

	cout << n1 << endl;  //11
	cout << s1[size] << endl; //D
	cout << s1.substr(size) << endl; //DataTest
	
	
	string s_2 = "1111";
	int n_2 = stoi(s_2, nullptr, 2);
	cout << n_2 << endl; //15

	string s_16 = "0x14";
	int n_16 = stoi(s_16, nullptr, 16);
	cout << n_16 << endl; //20

	return 0;
}