이 블로그에서는 C++에서 int를 string으로 변환하는 방법을 다룹니다. 우리는 int를 string으로 변환하는 데 도움이 되는 다양한 방법을 살펴보고 구현 방법을 배워보겠습니다.
C++ int를 string으로 변환하는 3가지 방법
1. to_string() 메서드를 사용하여 정수를 문자열로 변환하기
정수나 다른 데이터 형식의 변수나 값을 문자열로 명시적으로 변환하는 가장 간단하고 일반적인 방법은 to_string() 메서드를 사용하는 것입니다. to_string() 메서드에 변수나 값에 대한 매개변수 하나를 사용합니다. to_string() 메서드를 사용하는 구문은 다음과 같습니다.
string s = to_string(var);
여기서 ‘var’는 문자열로 변환해야 하는 변수이고 ‘s’는 변환된 문자열 변수입니다.
다음 예를 통해 명확한 아이디어를 얻을 수 있습니다.
// 필수 헤더 파일 포함
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
// 메인 함수
int main()
{
int n;
cout << "문자열로 변환할 정수를 입력하세요: ";
cin >> n;
string st = to_string(n); // 정수를 문자열로 변환
cout << "입력한 정수의 문자열 값은 : " << st << endl;
// 문자열 변환 성공 여부 확인
cout << typeid(st).name();
return 0;
}
output |
문자열로 변환할 정수를 입력하세요: 1234 입력한 정수의 문자열 값은 : 1234 class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > |
위 코드의 출력에서 볼 수 있듯이, typeid(st).name은 문자열을 반환합니다. 따라서 정수 n이 to_string() 함수를 사용하여 성공적으로 문자열 st로 변환되었습니다. 또한 성공적인 변환이 아니었다면 to_string() 메서드의 결과가 처음부터 문자열 형식 변수 ‘st’에 저장되지 않았을 것이며 오류가 발생했을 것입니다.
2. stringstream 클래스를 사용하여 정수를 문자열로 변환하기
다른 정수를 문자열로 변환하는 일반적인 방법은 stringstream 클래스를 사용하는 것입니다. 이 스트림 클래스는 헤더 파일 자체에 정의되어 있으며 문자열 기반 스트림에서 입력 및 출력 작업을 수행하는 데 사용됩니다. C++의 다음 연산자들은 각각 데이터를 추출하고 데이터를 데이터로 넣는 데 사용됩니다.
>> (추출) 연산자: 이 연산자는 문자열 스트림에서 데이터를 가져오는 데 사용됩니다.
예: StrStreamVar >> 11;
<< (삽입) 연산자: 이 연산자는 데이터를 문자열 스트림에 넣을 때 사용됩니다.
예: StrStreamVar << 11;
구문은 다음과 같습니다.
Stringstream st; // stringstream 객체 선언
st << var; // 스트림에 쓰기
string s; // 변환된 문자열을 저장할 문자열 변수 선언
st >> s; // 스트림에서 문자열 추출
여기서 ‘st’는 스트림에 쓰기 및 스트림에서 추출하는 데 사용되는 stringstream 클래스의 객체입니다. ‘var’는 스트림에 넣을 값을 보유하는 변수이고 ‘s’는 추출된 문자열을 저장하는 문자열 변수입니다.
다음 예를 통해 stringstream 클래스를 사용하여 C++에서 int를 string으로 변환하는 방법을 이해할 수 있습니다.
// 필수 헤더 파일 포함
#include <iostream>
#include<sstream>
using namespace std;
// 메인 함수
int main()
{
int var;
cout << "정수 값을 입력하세요 : ";
cin >> var;
stringstream str; // stringstream 객체 선언
str << var; // 스트림에 쓰기
string svar;
str >> svar; // 스트림에서 문자열 추출
cout << "\n" << "입력한 정수 값은 : " << var << "\n";
cout << "이 값의 문자열 표현은 : " << svar;
return 0;
}
output |
정수 값을 입력하세요 : 1234 입력한 정수 값은 : 1234 |
여기서 우리는 stringstream 클래스를 사용하고 있으며 이 클래스는 입력 정수 값을 문자열로 변환합니다. 여기서도 추출된 값을 문자열 변수 ‘svar’에 저장하고 성공적인 문자열로 변환 하였습니다. 또한 to_string() 함수를 사용하여 정수를 문자열로 변환하는 예에서 수행한 것처럼 변수 ‘i’의 데이터 형식을 type_id().name(svar)를 사용하여 확인할 수 있습니다.
이 방법을 사용하여 반대로 작업을 수행할 수도 있습니다. 즉, stringstream을 사용하여 문자열 값을 정수 값으로 변환할 수 있습니다. 명확성을 위해 다음 예제를 실행하는 것을 고려하십시오.
// 필수 헤더 파일 포함
#include <iostream>
#include<sstream>
using namespace std;
// 메인 함수
int main()
{
string str_num;
cout << "정수로 변환할 문자열을 입력하세요: ";
cin >> str_num;
stringstream strstream; // stringstream 객체 선언
strstream << str_num; // 스트림에 문자열 쓰기
int num;
strstream >> num; // 정수 형태의 문자열에서 스트림 추출
cout << "입력한 문자열은 : " << str_num << endl;
cout << "이 문자열의 정수 값은 : " << num;
return 0;
}
output |
정수로 변환할 문자열을 입력하세요: 1234 입력한 문자열은 : 1234 이 문자열의 정수 값은 : 1234 |
여기서 문자열 입력은 사용자로부터 받고, 이를 stringstream 클래스를 사용하여 정수로 변환합니다. 변수 ‘num’은 변환된 정수 값을 보유합니다. type_id(i).name()을 사용하면 변수 ‘num’의 데이터 형식을 확인할 수 있습니다.
3. boost::lexical_cast를 사용하여 정수를 문자열로 변환하기
C++에서 정수 값을 문자열 값으로 변환하는 세 번째 방법은 boost 라이브러리의 boost.lexical cast() 연산자를 사용하는 것입니다. 이 형 변환을 문자열 변환에 사용하는 방식은 다른 데이터 형식 변환에도 아주 잘 사용될 수 있습니다. boost.lexical cast의 사용을 위해 boost/lexical_cast 헤더 파일을 포함해야 합니다. 그렇지 않으면 컴파일러가 오류를 발생시킵니다.
구문은 다음과 같습니다.
string st = boost::lexical_cast<string>(val)
여기서 ‘val’은 문자열 형식으로 변환해야 하는 정수 변수 또는 값입니다. lexical_cast 연산자는 피연산자로서 문자열로 변환해야 하는 변수 또는 값 ‘val’을 취합니다. 이 경우 ‘val’의 데이터 형식은 int입니다.
다음 예를 통해 이를 더 잘 이해할 수 있습니다.
// 필수 헤더 파일 포함
#include <iostream>
#include <boost/lexical_cast.hpp> // boost 라이브러리의 lexical cast 연산자를 포함
#include <string>
using namespace std;
// 메인 함수
int main()
{
int var;
cout << "정수를 입력하세요: ";
cin >> var;
string str = boost::lexical_cast<string>(var); // int를 문자열로 변환하기 위해 lexical_cast 사용
cout << endl << "입력한 정수의 문자열 값은 :" << str;
return 0;
}
output |
정수를 입력하세요: 1234 입력한 정수의 문자열 값은 :1234 |
위 코드와 해당되는 출력에서 볼 수 있듯이 boost::lexical_cast는 정수를 성공적으로 문자열로 변환합니다. 이 방법은 문자열을 정수로 변환하는 데도 적용할 수 있습니다. lexical_cast의 꺽쇠 괄호 안의 데이터 형식을 변경해야 합니다. 따라서 문자열을 정수로 변환하려면 다음 구문을 사용해야 합니다.
구문:
int n = boost::lexical_cast<int>(st);
여기서 ‘n’은 변환된 정수 값을 보유하는 정수 변수입니다. ‘st’는 정수로 변환해야 하는 문자열 변수입니다. 는 인수를 정수 형식으로 변환해야 함을 나타냅니다.
동일한 작업을 수행하는 예를 보기 위해 다음 예제를 살펴보십시오.
// 필수 헤더 파일 포함
#include <iostream>
#include <boost/lexical_cast.hpp> // boost/lexical_cast 헤더 파일을 포함
using namespace std;
// 메인 함수
int main()
{
string str;
cout << "정수로 변환할 문자열을 입력하세요 : ";
cin >> str;
int i = boost::lexical_cast<int>(str); // lexical_cast를 사용하여 문자열을 정수로 변환
cout << endl << "입력한 문자열의 정수 값은 : " << i;
return 0;
}
output |
정수로 변환할 문자열을 입력하세요 : 1234 입력한 문자열의 정수 값은 : 1234 |
여기서 ‘1234’라는 문자열이 정수 형식으로 변환되었습니다. 확인을 위해 C++에서 변수 ‘i’의 데이터 형식을 type_id(i).name()을 사용하여 확인할 수 있습니다.
C++에서 int를 string으로 변환하는 이유와 시점
프로그래밍 시나리오에서 정수를 문자열로 취급해야 하는 경우, 위에서 설명한 세 가지 방법을 사용하여 명시적으로 문자열로 변환합니다. 때로는 산술 연산을 수행하는 것이 까다로울 수 있으며 문자열 연산을 대신 사용하는 것이 도움이 될 수 있습니다. 정수 변수나 값
에 대한 문자열 연산을 사용하려면 먼저 문자열로 변환해야 합니다. 예를 들어 현재 날짜를 출력하는 프로그램을 작성해야 한다고 가정해보십시오. 날짜를 dd/mm/yy 형식으로 표시하는 작업은 산술 연산 대신 문자열 연산을 사용하려고 할 것입니다. 이러한 두 가지 관점에서 동일한 시나리오를 살펴보겠습니다.
// 문자열 사용
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string yr = "2023"; // 'yr'을 문자열로 선언
cout << "오늘 날짜는: " << yr.substr(2) << "/10/06" <<endl;
return 0;
}
1행에서 ‘yr’을 문자열로 선언하고, substr(2) 함수를 사용하여 문자열 ‘yr’의 마지막 두 문자를 추출하여 dd/mm/yy 형식과 일치하도록 합니다. 이제 동일한 작업을 산술 연산을 사용하여 수행하는 방법을 살펴보겠습니다.
// 정수 사용
#include <iostream>
using namespace std;
int main()
{
// 두 개의 정수 변수 선언
int yr; // 현재 년도를 저장하는 변수
int format_yr; // 형식화된 년도를 저장하는 변수
yr = 2023;
format_yr = yr - 2000;
cout << "오늘 날짜는: " << format_yr << "/10/06" << endl;
return 0;
}
output |
오늘 날짜는: 23/10/06 |
우리는 ‘yr’을 문자열로 처리하든 정수로 처리하든 출력에서 차이가 없음을 알 수 있습니다. 그러나 후자는 원하는 형식의 날짜를 얻으려면 추가로 한 줄의 코드를 작성해야 한다는 점을 고려하면서 이 두 가지를 비교해 보세요. 이것은 문자열 대신 정수로 ‘yr’을 다루더라도 코드에 큰 차이를 만들지 않습니다. 그러나 많은 산술 연산을 대신하여 단일하고 더 쉬운 문자열 연산 또는 함수를 사용할 수 있는 상황에서는 정수를 문자열로 변환하는 것이 더 나을 수 있습니다. 따라서 위의 예에서처럼 정수로 선언한 ‘yr’을 문자열로 변환하여 원하는 형식을 얻을 수 있습니다.
결론
이제 C++에서 int를 string으로 변환하는 방법을 잘 이해하게 되었습니다. int를 string으로 변환하는 C++의 세 가지 방법을 수행할 수 있습니다 – to_string() 메서드, stringstream 클래스 및 boost::lexical_cast()입니다. 각 방법의 구문과 구현에 대한 이해와 예제를 살펴보았습니다. 이러한 방법 중 몇 가지는 다른 데이터 형식 변환에도 유용합니다. 예를 들어 stringstream 클래스는 문자열을 부동 소수점으로 변환하는 데도 사용할 수 있습니다.