2016-12-16 13 views
-1

数値を文字列に変換する非標準的な方法を考え出しました。しかし、文字列は、初期化するスペースの数だけ多くの桁数に対応します。私が必要とする数字を含むように正しく初期化するには?C++で必要な桁数を含むように文字列を初期化する方法は?

using namespace std; 

string numbertostring(int n) 
{ 
    int size=0; 
    string number="   "; 
    while(n) 
    { 
     number[size]=n%10+'0'; 
     size++; 
     n/=10; 
    } 
    int i,j; 
    for(i=0,j=size-1;i<j;++i,--j) 
    swap(number[i],number[j]); 
    return number; 
} 

int main() 
{ 
    cout<<numbertostring(1234)<<endl; 
    return 0; 
} 
+0

ちょうど[ 'to_string'](HTTPを使用します/ /en.cppreference.com/w/cpp/string/basic_string/to_string) – NathanOliver

+0

整数によって消費される桁数は、それを書き込むために使用されるベースのログに比例します。また、stringにはpush_backメソッドがあります。 – jaggedSpire

+0

Anubhav、私はあなたのタイトルの質問、 "文字列をC++で文字列に変換する方法は?"しかし、あなたの本物の質問が「必要なだけ多くの桁を含むように正しく初期化するにはどうすればよいですか」というテキストの中にあれば、そう言えば、私は再び開くよう投票します。 –

答えて

1

あなたの質問へのリテラルの答えは整数型が保持できる桁のmaxinum番号はこの式に等しいということである。

std::ceil(std::numeric_limits<TYPE>::digits10) 

だからあなたのコードは次のようになります。

std::string numbertostring(int n) 
{ 
    int size=0; 
    std::string number((std::size_t)std::ceil(std::numeric_limits<int>::digits10), 
         ' '); 
    while(n) 
    { 
     number[size]=n%10+'0'; 
     size++; 
     n/=10; 
    } 
    int i,j; 
    for(i=0,j=size-1;i<j;++i,--j) 
     std::swap(number[i],number[j]); 
    return number; 
} 

ただし、文字列を最大サイズに初期化する必要はありません。必要に応じて、std::string::push_backを使用して文字列を拡大することができます。これはまた、文字列が独自のサイズを追跡していることを意味するので、必要はありません。

また
std::string numbertostring(int n) 
{ 
    std::string number; 
    while(n) 
    { 
     number.push_back(n%10+'0'); 
     n/=10; 
    } 
    int i,j; 
    for(i=0,j=number.size()-1;i<j;++i,--j) 
     std::swap(number[i],number[j]); 
    return number; 
} 

std::reverse()が存在することに注意してください:

std::string numbertostring(int n) 
{ 
    std::string number; 
    while(n) 
    { 
     number.push_back(n%10+'0'); 
     n/=10; 
    } 
    std::reverse(number.begin(), number.end()); 
    return number; 
} 

をそして、最後に、std::to_string()はC++ 11以降が存在する:

std::string numbertostring(int n) 
{ 
    return std::to_string(n); 
} 
関連する問題