2014-12-13 41 views
0

我們被要求作出的功能,將十進制數字轉換爲二進制,並將一個整數作爲輸入,但必須給一個字符串作爲輸出。如何將數組存儲到一個字符串中?如何返回一個字符串,當我有一個函數,給出一個數組

string DecToBin(int num) 
{ 

    string res; 

    for (int n = 15; n >= 0; n--) 
    { 
     if ((num - pow(2, n)) >= 0) 
     { 
      res[n] = 1; 
      num -= pow(2, n); 
     } 
     else 
     { 
      res[n] = 0; 
     } 

    } 

    for (int n = 15; n >= 0; n--) 
    { 
     res[n]; 
    } 

} 
+1

當你聲明字符串的大小爲零時,也就是說, 'res [n]'將索引出現在* every *'n'的範圍之外,導致[* undefined behavior *](http://en.wikipedia.org/wiki/Undefined_behavior)。但是,如果你閱讀例如[這個'std :: string'引用](http://en.cppreference.com/w/cpp/string/basic_string)我相信你可以找到*附加*字符到字符串的東西。 – 2014-12-13 11:40:38

+0

此外,'res [n] = 1'是錯誤的,你需要指定一個像這樣的字符'res [n] ='1'' – 2014-12-13 11:42:17

+1

另外,雖然我確定'pow'函數有一個特例當第一個參數是'2'時,通常的方法是使用移位運算符,例如'1 << n'。另外,你有沒有檢查你得到的參數數量不超過16位?在今天的大多數平臺上,「int」是32位。 – 2014-12-13 11:47:01

回答

1

你只返回一個字符串

return res; 

就是這樣。

+1

但考慮到您的原始評論帖子。 – 2014-12-13 11:45:58

+0

哦謝謝你!有效!!但現在答案是相反的順序:O – Renz 2014-12-13 11:54:19

+0

這可能是一個不同的問題,我已經看到很多算法來將一個'int'轉換爲二進制字符串表示,但不是你的。我建議你瞭解[Bitwise Operators](http://en.wikipedia.org/wiki/Bitwise_operation) – 2014-12-13 11:56:52

1

你可以做這樣的事情,

#include <iostream> 
#include <string> 

std::string foo(int n) 
{ 
    std::string s; 
    while(n > 0){ 
     s += n%2 == 0 ? '0' : '1'; 
     n = (n >> 1); 
    } 
    return std::string(s.rbegin(), s.rend()); 
} 

int main() 
{ 
    int n = 13; 
    std::cout << foo(n) << std::endl; 
    return 0; 
} 

打印

1101 
0

只需添加

return res; 

你的函數結束。

1

正如你已經生成了如何返回結果的答案,我添加了一個字符串生成的補充。

當它給你CHAR_BIT然後通過例如計算位數的替代可以包括<climits>

#include <climits> 

int bits = CHAR_BIT * sizeof(int); 

,或者您可以使用<limits>和這樣說:

#include <limits> 

int bits = std::numeric_limits<int>::digits; 

然後只是從頭開始循環:

string int2bitstr(int n) 
{ 
    int bits = numeric_limits<int>::digits; 
    string s; 
    int i; 

    for (i = bits - 1; i >= 0; --i) 

而且這樣說:

 s += n & (1 << i) ? '1' : '0'; 

或:

 s += (n >> i) & 1 ? '1' : '0'; 

或位(沒有雙關語意)更快:

 s += ((n >> i) & 1) + '0'; 

原因的最後一部作品是因爲一個添加字符字形0的值到數字0或1 - 實際上給出'0'或'1'。

相關問題