BOJ 5430 번과 같은 문제를 풀 때 참 곤란한 점이 있는데 입력을 [1,1,2,3,5,8]과 같이 주고, 여기서 숫자를 뽑아내서 사용해야 하는 것이다. 배열에 있는 숫자가 모두 한자리 수라면 간단하게 해결할 수 있지만 이 문제의 경우에는 원소가 1 에서 100 까지의 수이므로 쉽지 않았다. 그래서 이번 기회에 string 또는 char 배열을 int 타입으로 바꾸는 방법을 정리해봤다.
1. stringstream
stringstream 은 숫자로 이루어진 string 을 int 나 float, double 로 바꾸는 쉬운 방법이다. [1,11,2,33,5,100] 에서 숫자만 추출하는 코드를 작성해봤다. 참고로 sstream 을 include 하면 string 을 include 할 필요가 없는 것 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> #include <sstream> using namespace std; int main() { string s = "[1,1,2,3,5,8]"; string str = ""; for (int i = 1; i < s.length(); i++) { if (s[i] != ',' && s[i] != ']') str += s[i]; else { stringstream geek(str); int x = 0; geek >> x; cout << x << " "; str = ""; } } cout << '\n'; return 0; } | cs |
2. stoi() 또는 atoi()
stoi 와 atoi 는 1번에서 소개한 stringstream 보다는 이해하기 쉬운 논리 구조를 가지고 있는것 같다. 앞으로는 이 방법을 이용할 예정이다. 다만, 컴파일러가 C++ 11 이상을 지원할 때만 사용할 수 있다. 스택오버플로우의 한 글을 보면 atoi 가 0 이나 에러를 리턴할 수 있다고 stoi 를 사용하는 것을 권장한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <iostream> #include <string> using namespace std; int main() { string s = "[1,11,2,33,5,100]"; string str = ""; for (int i = 1; i < s.length(); i++) { if (s[i] != ',' && s[i] != ']') str += s[i]; else { int x = stoi(str); cout << x << " "; str = ""; } } cout << '\n'; return 0; } | cs |
'C++' 카테고리의 다른 글
C++ 토막 지식(19.01.16) - class (0) | 2019.01.16 |
---|---|
C++ 토막 지식(19.01.14) - struct, enum (0) | 2019.01.14 |
C++ 토막 지식(19.01.09 - 10) (0) | 2019.01.10 |
UML(Unified Modeling Language)란? (0) | 2019.01.08 |
객체지향 언어의 특성 (0) | 2019.01.07 |