source

C++에서 int를 문자열로 변환하는 가장 쉬운 방법

manycodes 2023. 4. 21. 21:05
반응형

C++에서 int를 문자열로 변환하는 가장 쉬운 방법

할 수 있는 입니까?int 등 equival에 상당하는stringC++면요? 있어요.나는 두 가지 방법을 알고 있다.더더 방법 ?? ???

(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_stringBoost(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 (예:1234123abc던질 것이다).

저는 보통 다음 방법을 사용합니다.

#include <sstream>

template <typename T>
  std::string NumberToString ( T Number )
  {
     std::ostringstream ss;
     ss << Number;
     return ss.str();
  }

여기에 자세히 설명되어 있습니다.

하시면 됩니다.std::to_stringMatthieu 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_stringBoost 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이렇게 하면 비교 작업이 전혀 작동하지 않을 수 있습니다.

그래서 저는 그 방법을 적극 추천합니다.그것은 더 쉽고 당신이 원하는 것을 할 수 있다.

std::to_string에서:

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

반응형