C++ string to int, int to string 형변환 하기 , string 문자열에서 숫자만 선택해 형변환
int stoi (const string& str [, size_t* idx = 0, int base = 10]) : string to int
- string을 int로 바꾸어주기 위해서 stoi() 함수를 사용해 준다.
(stoi -> string to integer를 줄인 것이다. 그래서 이를 응용해 생각해보면, stoll은 string to long long으로 long long 형으로 형변환 할 수 있다.)
- stoi()을 사용하기 위해서는 #include <string> 을 해주어야 한다.
(※ #include <string.h>가 아닌 <string>을 해주어야 한다. )
- 3번 째 인수를 보면 디폴트 값으로 10이 주어져 있다. 이를 변경해주면 n진수의 문자열을 10진수의 수로 변경할 수 있다.
string to_string(int val) : int to string
- 함수명 그대로 string 형으로 바꾸어 줄수 있다.
- 인수로는 int 뿐만 아니라 double형 long long형 등등... 을 사용할 수 있다.
- to_string()을 사용하기 위해서는 #include <string> 을 해주어야 한다.
[ 코 드 ]
#include <iostream>
#include <string>
using namespace std;
int main() {
string a = "1234", b = "1a2b3c";
int num = 4321;
// 1. string -> int
cout << stoi(a) << "\n";
// 8진수 1234를 -> 10진수로 변환
cout << stoi(a,nullptr,8) << "\n";
// 2. string 문자열에서 숫자만 구분하여 출력
for (int i = 0; i < b.size(); i++) {
if (b[i] >= '0' && b[i] <= '9') cout << b[i] - '0';
}
cout << "\n";
// 3. int -> string
string s = to_string(num);
string r = "결과 = ";
r += num;
cout << r << "\n";
r = "결과 = ";
r += s;
cout << r << "\n";
return 0;
}
- 10라인 : 문자열의 숫자만 있을 경우 그냥 stoi를 사용해주면 숫자로 변경 할 수 있다.
만약 문자열의 숫자와 문자가 섞여 있다면, 앞에서부터 문자가 나올 때까지의 숫자만을 변환해 준다.
- 12라인 : 진수를 지정해주었다. 8진수인 "1234"를 10진수로 변환해준다. 결과는 668.
- 17라인 : string 문자열을 하나씩 접근할 때는 char형이다. 그래서 숫자일 경우 '0'(=48) 와 '9'(=57) 사이의 값을 가지면 숫자이다.
만약 숫자일 경우 '0'(=48)을 빼주면 숫자를 구할 수 있다.
ex) 문자가 '2'일 경우 아스키 코드 상 50이므로 여기에 '0'(=48)을 빼주면 숫자 2를 얻을 수 있다.
- 23라인 : to_string() 을 사용하여서 숫자를 문자열로 바꾸었다.
[ 결 과 ]
숫자를 문자열로 변경하지 않은 채 문자열과 더해 주었을 때는 아무것도 출력되지 않았다.
하지만 to_string으로 문자열로 변환한 후 더해준 문자열을 출력해주었을 때는 잘 출력되는 것으로 보아 무자열로 잘 변환 되었다는 것을 확인할 수 있다.
참조
http://www.cplusplus.com/reference/string/stoi/
'C++ > Algorithm' 카테고리의 다른 글
C++ vector 최대값, 최소값 (0) | 2020.04.13 |
---|---|
C++ string 소문자, 대문자 변환 - tolwer, toupper (0) | 2020.04.13 |
C++ 제곱근 구하기, n승 값 구하기 : sqrt(), pow() (0) | 2020.01.30 |
C++ 소수 찾기, 검사하기 [에라토스테네스의 체] (0) | 2020.01.29 |
C++ #include <bits/stdc++.h> 헤더 사용하기 (0) | 2020.01.28 |