C++에서 int를 문자열로 변환하는 가장 쉬운 방법
할 수 있는 입니까?int
등 equival에 상당하는string
C++면요? 두 있어요.나는 두 가지 방법을 알고 있다.더더 방법 ?? ???
(1)
int a = 10;
char *intStr = itoa(a);
string str = string(intStr);
(2)
int a = 10;
stringstream ss;
ss << a;
string str = ss.str();
C++11에는 C의 대응(및 각 수치 타입의 배리언트)와 가 도입되어 있습니다.atoi
★★★★★★★★★★★★★★★★★」itoa
, 「」로됩니다.std::string
.
#include <string>
std::string s = std::to_string(42);
그래서 제가 생각할 수 있는 가장 짧은 방법입니다.이름을 할 수식어를 하면 됩니다.auto
★★★★★★★★★★★★★★★★★★:
auto s = std::to_string(42);
주의: "string.conversions" (n3242의 21.5)를 참조해 주세요.
C++20: std:: format은 현재 관용적인 방법입니다.
C++17:
몇 년 후 @v.odou와의 논의를 통해 C++17은 매크로의 추악함을 거치지 않고 원래의 매크로 베이스의 타입 아그노스틱 솔루션(아래에 기재)을 실행할 수 있는 방법을 제공하고 있습니다.
// variadic template
template < typename... Args >
std::string sstr( Args &&... args )
{
std::ostringstream sstr;
// fold expression
( sstr << std::dec << ... << args );
return sstr.str();
}
사용방법:
int i = 42;
std::string s = sstr( "i is: ", i );
puts( sstr( i ).c_str() );
Foo x( 42 );
throw std::runtime_error( sstr( "Foo is '", x, "', i is ", i ) );
C++98:
"convert ... to string"은 반복적인 문제이기 때문에 항상 C++ 소스의 중앙 헤더에 SSR() 매크로를 정의합니다.
#include <sstream>
#define SSTR( x ) static_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
사용법은 최대한 간단합니다.
int i = 42;
std::string s = SSTR( "i is: " << i );
puts( SSTR( i ).c_str() );
Foo x( 42 );
throw std::runtime_error( SSTR( "Foo is '" << x << "', i is " << i ) );
과 호환성이 있습니다( 「C++98」을 할 수 ).std::to_string
Boost(Boost)를 할 수 를 포함한.lexical_cast<>
두 솔루션 모두 성능이 더 우수합니다.
현재 C++
부터 C++11이 std::to_string
정수 타입에 대해 함수가 오버로드되므로 다음과 같은 코드를 사용할 수 있습니다.
int a = 20;
std::string s = std::to_string(a);
// or: auto s = std::to_string(a);
에서는 '을 '이것들', '이것들', '이것들', '이것들'로 하고 있습니다.sprintf
합니다.를 들어, (예를 들어)%d
★★★★★★에int
를 충분한 크기의한 후 )을 작성합니다.std::string
을 사용법
구 C++
으로 두 를 보통 으로 정리하는 수 .lexical_cast
예를 들어 Boost에 있는 코드와 같이 코드는 다음과 같습니다.
int a = 10;
string s = lexical_cast<string>(a);
이것의 장점 중 하나는 다른 캐스팅도 지원한다는 것입니다(예: 반대 방향도 마찬가지입니다).
, Boost 「Boost」(부스트)도 주의해 주세요.lexical_cast
처음에는 그저 편지를 쓰는 것으로 시작했다.stringstream
스트림에서 추출하여 몇 가지 추가가 되었습니다. 꽤 되어 있기 에, 타입의 '어느 쪽인가', '어느 쪽인가', '어느 쪽인가', '어느 쪽인가', '어느 쪽인가', '어느 쪽인가', 'VIP 쪽인가'를 하는 것보다 상당히 빠릅니다.stringstream
번째는 를 들어)에서 째로 제로 변환됩니다.따라서 (예를 들어) 스트링에서 스트링으로 변환하면int
되어 있으면 시킬 수 있습니다.int
(예:1234
123abc
던질 것이다).
저는 보통 다음 방법을 사용합니다.
#include <sstream>
template <typename T>
std::string NumberToString ( T Number )
{
std::ostringstream ss;
ss << Number;
return ss.str();
}
여기에 자세히 설명되어 있습니다.
하시면 됩니다.std::to_string
Matthieu M이 제안한 대로 C++11로 제공됩니다.
std::string s = std::to_string(42);
를 들어 변환을에는 """를 사용할 수 .fmt::format_int
정수를 변환할 {fmt} 라이브러리에서std::string
:
std::string s = fmt::format_int(42).str();
또는 C 문자열:
fmt::format_int f(42);
const char* s = f.c_str();
는 동적 70% .std::to_string
Boost Karma 벤치마크에 대해 설명합니다.자세한 내용은 1억 정수를 초당 문자열로 변환을 참조하십시오.
면책사항:저는 {fmt} 라이브러리의 저자 입니다.
Boost가 설치되어 있는 경우(필요한 경우):
#include <boost/lexical_cast.hpp>
int num = 4;
std::string str = boost::lexical_cast<std::string>(num);
스트링 스트림을 사용하는 것이 더 쉬울 것입니다.
#include <sstream>
int x = 42; // The integer
string str; // The string
ostringstream temp; // 'temp' as in temporary
temp << x;
str = temp.str(); // str is 'temp' as string
또는 함수를 만듭니다.
#include <sstream>
string IntToString(int a)
{
ostringstream temp;
temp << a;
return temp.str();
}
제가 알기로는 순수한 C++로요.하지만 당신이 말한 것을 조금 수정하면
string s = string(itoa(a));
작동해야 하고, 꽤 짧습니다.
sprintf()
포맷 변환에 매우 적합합니다.다음으로 1과 같이 결과 C 문자열을 C++ 문자열에 할당할 수 있습니다.
숫자 변환에 문자열 스트림을 사용하는 것은 위험합니다!
std:: ostream::operator << 를 참조해 주세요.operator<<
이치노
현재 로케일에 따라서는 3자리보다 큰 정수를 4자리 문자열로 변환하여 수천 개의 구분 기호를 추가할 수 있습니다.
,,int = 1000
할 수 .1.001
이렇게 하면 비교 작업이 전혀 작동하지 않을 수 있습니다.
그래서 저는 그 방법을 적극 추천합니다.그것은 더 쉽고 당신이 원하는 것을 할 수 있다.
C++17은 다음을 제공합니다.
std::to_chars
보다 고성능의 로케일에 의존하지 않는 대체 수단으로서 사용됩니다.
첫 번째는 다음과 같습니다.
#include <string>
#include <sstream>
두 번째로 메서드를 추가합니다.
template <typename T>
string NumberToString(T pNumber)
{
ostringstream oOStrStream;
oOStrStream << pNumber;
return oOStrStream.str();
}
다음과 같은 방법을 사용합니다.
NumberToString(69);
또는
int x = 69;
string vStr = NumberToString(x) + " Hello word!."
C++11에서는 "to_string()" 함수를 사용하여 int를 문자열로 변환할 수 있습니다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int x = 1612;
string s = to_string(x);
cout << s<< endl;
return 0;
}
C++17은 로케일에 의존하지 않는 고성능 대체 수단으로서 제공됩니다.
고정 자리수를 가지는 정수를 「0」으로 왼쪽 패드로 문자*로 고속 변환하는 경우는, 리틀 엔디안 아키텍처(모두 x86, x86_64 등)의 예를 나타냅니다.
2자리 숫자를 변환하는 경우:
int32_t s = 0x3030 | (n/10) | (n%10) << 8;
3자리 숫자를 변환하는 경우:
int32_t s = 0x303030 | (n/100) | (n/10%10) << 8 | (n%10) << 16;
4자리 숫자를 변환하는 경우:
int64_t s = 0x30303030 | (n/1000) | (n/100%10)<<8 | (n/10%10)<<16 | (n%10)<<24;
숫자까지 가능합니다.7자리 숫자까지 가능합니다. 예에서는 " " 입니다.n
을 사용하다변환 후 문자열 표현은 다음과 같이 액세스할 수 있습니다.(char*)&s
:
std::cout << (char*)&s << std::endl;
주의: 빅 엔디안 바이트 순서로 필요한 경우는 테스트하지 않았지만, 예를 들어 세 자리 숫자의 경우 다음과 같습니다.int32_t s = 0x00303030 | (n/100)<< 24 | (n/10%10)<<16 | (n%10)<<8;
숫자 아치 4자리 숫자(64비트 아치):int64_t s = 0x0000000030303030 | (n/1000)<<56 | (n/100%10)<<48 | (n/10%10)<<40 | (n%10)<<32;
★★★★★★★★★★★★★★★★★★★★★★★★★★★
스트레이크한 스트링으로 즉석에서 스트림을 만들 수 있는 구문설탕을 넣기 쉽다.
#include <string>
#include <sstream>
struct strmake {
std::stringstream s;
template <typename T> strmake& operator << (const T& x) {
s << x; return *this;
}
operator std::string() {return s.str();}
};
것을 할 수 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」).<< (std::ostream& ..)
strmake()
그 대신 사용할 수 있습니다.std::string
.
예:
#include <iostream>
int main() {
std::string x =
strmake() << "Current time is " << 5+5 << ":" << 5*5 << " GST";
std::cout << x << std::endl;
}
용도:
#define convertToString(x) #x
int main()
{
convertToString(42); // Returns const char* equivalent of 42
}
int i = 255;
std::string s = std::to_string(i);
C++에서 to_string()은 값을 일련의 문자로 나타내 정수 값의 문자열 개체를 만듭니다.
사용방법:
int myint = 0;
long double myLD = 0.0;
string myint_str = static_cast<ostringstream*>(&(ostringstream() << myint))->str();
string myLD_str = static_cast<ostringstream*>(&(ostringstream() << myLD))->str();
Windows 및 Linux g++ 컴파일러로 동작합니다.
여기 또 다른 쉬운 방법이 있습니다.
char str[100];
sprintf(str, "%d", 101);
string s = str;
sprintf
는 필요한 형식의 문자열에 데이터를 삽입하는 것으로 잘 알려져 있습니다.
할 수 .char *
이치노
MFC를 사용하는 경우CString
:
int a = 10;
CString strA;
strA.Format("%d", a);
C++11은 수치 타입용으로 도입되었습니다.
int n = 123; // Input, signed/unsigned short/int/long/long long/float/double
std::string str = std::to_string(n); // Output, std::string
용도:
#include<iostream>
#include<string>
std::string intToString(int num);
int main()
{
int integer = 4782151;
std::string integerAsStr = intToString(integer);
std::cout << "integer = " << integer << std::endl;
std::cout << "integerAsStr = " << integerAsStr << std::endl;
return 0;
}
std::string intToString(int num)
{
std::string numAsStr;
bool isNegative = num < 0;
if(isNegative) num*=-1;
do
{
char toInsert = (num % 10) + 48;
numAsStr.insert(0, 1, toInsert);
num /= 10;
}while (num);
return isNegative? numAsStr.insert(0, 1, '-') : numAsStr;
}
은 만 있으면 .String
( 를 참조해 주세요).String intStr
이할 경우 든지 에 문의하십시오. 이 변수가 필요할 때는 언제든지 콜합니다.whateverFunction(intStr.toInt())
일반 표준 stdio 헤더를 사용하면 다음과 같이 sprintf를 통해 정수를 버퍼에 캐스트할 수 있습니다.
#include <stdio.h>
int main()
{
int x = 23;
char y[2]; // The output buffer
sprintf(y, "%d", x);
printf("%s", y)
}
필요에 따라서 버퍼 사이즈를 관리해 주세요(문자열 출력 사이즈).
내 함수 "inToString" 사용
"number"라는 정수 인수를 받아들입니다.
다음과 같이 인수 유형을 INT 대신 FLOAT 또는 DUBLE로 변경할 수 있습니다.
"InToString(플로트 번호)" 또는 "inToString(더블 번호)"
동작은 괜찮지만, 꼭 같은 타입으로 주세요^_^
#include<iostream>
#include<sstream>
using namespace std;
string inToString(int number){
stringstream stream;
stream << number;
string outString;
stream >> outString;
return outString;
}
int main(){
int number = 100;
string stringOut = inToString(number);
cout << "stringOut : " + stringOut << endl;
return 0;
}
string number_to_string(int x) {
if (!x)
return "0";
string s, s2;
while(x) {
s.push_back(x%10 + '0');
x /= 10;
}
reverse(s.begin(), s.end());
return s;
}
이건 나한테 효과가 있었어-
내 코드:
#include <iostream>
using namespace std;
int main()
{
int n = 32;
string s = to_string(n);
cout << "string: " + s << endl;
return 0;
}
는 용하는 i i i를 사용하는 것 요.stringstream
매우 간단합니다.
string toString(int n)
{
stringstream ss(n);
ss << n;
return ss.str();
}
int main()
{
int n;
cin >> n;
cout << toString(n) << endl;
return 0;
}
char * bufSecs = new char[32];
char * bufMs = new char[32];
sprintf(bufSecs, "%d", timeStart.elapsed()/1000);
sprintf(bufMs, "%d", timeStart.elapsed()%1000);
namespace std
{
inline string to_string(int _Val)
{ // Convert long long to string
char _Buf[2 * _MAX_INT_DIG];
snprintf(_Buf, "%d", _Val);
return (string(_Buf));
}
}
해서 '어울리지 않다'를 할 수 되었습니다.to_string(5)
.
언급URL : https://stackoverflow.com/questions/5590381/easiest-way-to-convert-int-to-string-in-c
'source' 카테고리의 다른 글
URIFormatException: 잘못된 URI: 잘못된 포트가 지정됨 (0) | 2023.04.21 |
---|---|
Windows Azure 서비스를 빌드할 때 경로가 너무 깁니다. (0) | 2023.04.21 |
C# SQL Server Data Types 등가 (0) | 2023.04.21 |
세션 상태 서버에 세션 상태 요청을 할 수 없습니다. (0) | 2023.04.21 |
키보드의 높이를 얻는 방법 (0) | 2023.04.21 |