Programming Language/C,C++

C++에서 문자열을 숫자로, 숫자를 문자열로

TwinParadox 2017. 12. 9. 23:53
728x90

문자열 처리, 특히 숫자를 문자열로 다루어야 하는 문제들을 접하면 C언어를 주로 했던 사람들은 바로 떠올리는 게 atoi나 itoa다. 물론, 이를 몰라서 아스키 코드를 바탕으로 한 문자열 처리를 하겠지만(필자가 그랬다.), 어쨌든 이 두 함수를 알고 있는 사람들은 C++에서도 cstdlib.h 헤더 파일을 추가해주면 사용이 가능하다.


문자열을 숫자로 변환시켜주는 atoi는 표준 함수라서 크게 문제되진 않지만, 함수 자체가 가지고 있는 문제점이 있어서 더 좋은 대안이 있다면 사용에 주의를 기울여야 한다. 보통은 기본적인 수준의 문자열 처리 문제들을 푸는 상황에서는 문제가 없다.


문제는, 숫자를 문자열로 변환 시키는 itoa다. 표준이 아니라서 비표준 함수를 처리해주지 못하는 컴파일러를 만나면 컴파일 에러를 발생시킨다. 그래서 모든 환경에서 문제 없이 돌아가게 하려면 별도의 처리 알고리즘을 구현해야 한다.


이런 상황에서 C++의 string을 두고 char 배열만을 이용해서 문자열-숫자 간 처리를 하는 건 그리 효율적이지 못한 것 같다.



string 헤더 파일에는 stoi, to_string이라는 함수가 있다.

각각 문자열을 숫자로, 숫자를 문자열로 변환시켜주는 것들로 표준 함수이며, 손쉽게 이용할 수 있다.



stoi(str)

문자열 str을  int형으로 반환하는 표준 함수로, C++ 11을 지원하는 컴파일러에서 이용이 가능하다는 단점이 있다. C++ 11 이상의 버전을 지원하지 않는 컴파일러라면 반 강제적으로 atoi를 이용하거나, 직접 구현하는 방법밖에 없다.

특정 자료형 별로 함수가 존재해서 그에 맞게 사용하면 된다. 예를 들어, long long형(stoll), long double형(stold) 등의 함수가 존재한다.




to_string(Val)

해당하는 값을 string으로 반환한다. string 헤더에서 지원하는 이 함수를 사용하지 않으면, 위험을 감수하고 비표준함수인 itoa을 사용하는 모험을 시도하거나, 직접 구현해야 하는 번거로움을 떠안는다. string 헤더를 이용하면 간단한 함수 하나로 문자열 값을 돌려받을 수 있다.

728x90