답변:
C ++ 11에서 std :: to_string 을 사용할 수 있습니다
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
...에서 boost/lexical_cast.hpp
std :: ostream을 지원하는 모든 작업에 적합하지만, 예를 들어 itoa
심지어 stringstream 또는 scanf보다 빠릅니다.
lexical_cast
가져 오는 것과 같은 것이지만 부스트는 이런 종류의 작업에 너무 과도하다고 생각합니다 ...
잘 알려진 방법은 스트림 연산자를 사용하는 것입니다.
#include <sstream>
std::ostringstream s;
int i;
s << i;
std::string converted(s.str());
물론 템플릿 기능을 사용하여 모든 유형에 대해 일반화 할 수 있습니다 ^^
#include <sstream>
template<typename T>
std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
#include <sstream>
.
std::
;)
std::to_string
C ++ 11에서 사용할 수없는 경우 cppreference.com에 정의 된대로 작성할 수 있습니다.
std::string to_string( int value )
부호있는 십진 정수를std::sprintf(buf, "%d", value)
충분히 큰 buf를 생성 할 내용과 동일한 내용의 문자열로 변환합니다 .
이행
#include <cstdio>
#include <string>
#include <cassert>
std::string to_string( int x ) {
int length = snprintf( NULL, 0, "%d", x );
assert( length >= 0 );
char* buf = new char[length + 1];
snprintf( buf, length + 1, "%d", x );
std::string str( buf );
delete[] buf;
return str;
}
더 많은 것을 할 수 있습니다. 그냥 사용 "%g"
변환 플로트 또는 문자열로 사용 두 배 "%x"
에 너무 진수 표현으로 변환 INT에, 그리고.
비표준 기능이지만 가장 일반적인 컴파일러에서 구현됩니다.
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
최신 정보
C ++ 11은 몇 가지 std::to_string
오버로드를 도입했습니다 (기본은 10 진법입니다).
ostream
아니라 작품, 당신은 진수, 8 진수 또는 16 진수 형식이 아닌 다른 무언가로 숫자 문자열을 저장해야 할 때까지 (예를 들어 기본-32).
itoa()
나 stricmp()
에 대한 응답으로 주어진 아무것도 .
sprintf
OP의 목표를 달성 할 수도 있습니다 (공통 기본 번호 이외의 것이 필요한 경우 여전히 유연성 부족으로 어려움을 겪고 있습니다).
다음 매크로는 일회용 ostringstream
또는 처럼 컴팩트하지 않습니다 boost::lexical_cast
.
그러나 코드에서 반복적으로 문자열로 변환해야하는 경우이 매크로는 매번 문자열 스트림을 직접 처리하거나 명시 적 캐스팅보다 사용하기가 더 우아합니다.
또한 지원되는 모든 것을 조합 하여 변환하기 때문에 매우 다목적 입니다.operator<<()
정의:
#include <sstream>
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
설명:
는 std::dec
익명을 만들 수있는 부작용이없는 방법입니다 ostringstream
일반에 ostream
있도록 operator<<()
기능 조회가 모든 종류의 올바르게 작동합니다. (첫 번째 인수가 포인터 유형이면 문제가 발생합니다.)
는 dynamic_cast
에 형 다시 반환 ostringstream
당신이 호출 할 수 있도록 str()
그것을합니다.
사용하다:
#include <string>
int main()
{
int i = 42;
std::string s1 = SSTR( i );
int x = 23;
std::string s2 = SSTR( "i: " << i << ", x: " << x );
return 0;
}
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() }
하지 않습니까? (테스트를 거치지 않았지만 무엇이 잘못 될지 궁금합니다.
int
(첫 번째 예). 그러나 않고 ostream
있는 컴파일러 볼 main
(이 템플릿 함수 내에서 숨겨져로), 그것을 찾기 위해 노력할 것입니다 operator<<()
에 대한 const char []
내 두 번째 예에 - 까악 까악 것이다. OP가에 대한 요청 만 알고 int
있지만 이보다 일반적인 매크로는 매우 유용하며 실제로 여기에 포함시킬 것이라고 생각했습니다.
프로젝트에 itoa 구현을 포함시킬 수 있습니다.
다음은 std :: string과 함께 작동하도록 수정 된 내용입니다 : http://www.strudel.org.uk/itoa/
#include <string>
#include <stdlib.h>
여기에 int를 문자열로 변환하는 또 다른 쉬운 방법이 있습니다.
int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());
더 많은 방법을 보려면이 링크를 방문하십시오 https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/
내가 가지고 있다고 가정 해보십시오 integer = 0123456789101112
. 이제이 정수는 stringstream
클래스에 의해 문자열로 변환 될 수 있습니다 .
다음은 C ++ 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
string s;
stringstream st;
for(i=0;i<=12;i++)
{
st<<i;
}
s=st.str();
cout<<s<<endl;
return 0;
}