2016-12-16 78 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

一個整數所消耗的數字的數量與它在用於寫入它的基數中的日誌成比例。此外,字符串有一個push_back方法。 – jaggedSpire

+0

Anubhav,我投票關閉,因爲您的標題中的問題,「如何將數字轉換爲C++字符串?」,重複了一個現有的問題。但是,如果您真正的問題是文中的問題,「如何正確初始化以包含儘可能多的數字」,請說出來,我將投票重新開放。 –

回答

1

字面回答你的問題是,數字的整數類型可以持有參數最大數目等於該表達式:

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); 
}