본문 바로가기

C++

C++ string 또는 char 배열을 int 타입으로 바꾸는 방법

출처


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