2011-08-03 62 views
3
int b; 
int array[12]; 

cout << "Enter binary number: "; 
cin >> b; 

(例如:B將被10100)如何將輸入存儲到數組中? C++

**如何B(10100)存儲到一個數組,使得它會是[1] [0] [1] [0] [ 0] **

cout << array[0] << endl; 

**輸出應爲1 **

cout << array[1] << endl; 

**輸出應爲0 **

請幫忙,謝謝。

+0

這是一種功課嗎? –

+0

沒有作業,但需要解決的問題,所以在學期開始時我不會在課堂上掙扎。 – Junior89

+0

@Kit Ho,以及作爲軟件工程師,您是否編程和/或使用C++? – Junior89

回答

7

A string也可以被當作char的數組。所以你可以輸入一個字符串,而你寫的cout聲明應該可以工作。然而,他們將char秒且不整數,所以你會被存儲「1」和「0」,而不是1和0之間的轉換很容易,只要使用array[0]-'0'

#include <string> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    string array; 
    cout << "Enter binary number: "; cin >> array; 
    // Suppose the user inputs 10100 
    cout << array[0] << endl; // outputs '1' 
    cout << array[1] << endl; // outputs '0' 
    cout << array[2] << endl; // outputs '1' 

    return 0; 
} 

更新:新增可編譯的代碼。請注意,除了輸入string之外,這幾乎是與問題一起發佈的原始代碼。

+0

OP不在任何地方使用字符串。 –

+0

謝謝我感謝您的幫助,但我從哪裏開始寫什麼?大聲笑抱歉,即時通訊新的這一點,我只是不知道如何實際「存儲」二進制到陣列 – Junior89

+0

@Chris我同意他沒有使用它,但是,我相信這是解決問題最簡單的方法爲他張貼了它(或者,據我瞭解它!)。 – Pablo

1

您可以使用動態靴子bitset的

#include "boost/dynamic_bitset.hpp" 
#include <sstream> 
#include <iostream> 

int main() 
{ 
    boost::dynamic_bitset<>  val; 
    std::stringstream   input("1010101010"); 

    input >> val;      // Input a binary number 
             // Can use std::cin or another stream 
    std::cout << val.to_ulong() << "\n"; 
    std::cout << val[5] << "\n"; 
} 

如果沒有提振使用std :: bitset的。
性病唯一的問題:: BitSet中有固定的大小

#include <bitset> 
#include <sstream> 
#include <iostream> 

int main() 
{ 
    std::bitset<16>    val;  // fixed 16 bit size 

    std::cout << "Enter binary number:\n"; 
    std::cin >> val;      // Input a binary number 
             // Can use std::cin or another stream 
    std::cout << val.to_ulong() << "\n"; 
    std::cout << val[5] << "\n"; 
} 
+0

嘿,我得到了一大堆的錯誤與你的代碼:/ – Junior89

+0

@ Junior89:那麼你做錯了什麼。你能更具體一點嗎?注意:它使用boost(這是您在編譯器之後立即安裝的C++程序中的一個)。如果你沒有提升或者沒有設置包含路徑來提升,那麼它將無法編譯。 –

+0

@ Junior89:查看std :: bitset版本 –

1

我原本寫了類似巴勃羅一個答案,但看到他已經貼吧,這裏是給定信息的一個更一致。

需要輸入int並將其放入int array

#include <iostream> 
#include <cmath> 

int main() 
{ 
    int b; 
    int numDigits; 

    // Get bit string int 
    std::cin >> b; 

    // Get the number of digits 
    numDigits = std::floor(std::log10((float)std::abs(b != 0 ? b : 1))) + 1; 

    // Dynamically create a new array of the appropriate size 
    int* arr = new int[ numDigits ]; 

    // Initialize all the blocks of memory 
    std::memset(arr, 0, numDigits); 

    // Fill the array 
    for(int i = 0; i < numDigits; i++) 
    { 
     arr[ numDigits - i - 1 ] = b % 10; 
     b /= 10; 
    } 

    system("PAUSE"); 

    // Delete the array 
    delete [] arr; 

    return 0; 
} 

這一個動態地設置數組的大小,使它正確適合。

+0

你的代碼運行,但它什麼都不做。當我編譯它時,我插入了二進制數,然後嘗試了一個大小,但我得到的只是「按任意鍵繼續」 – Junior89

+0

@ Junior89是的,這是打算。該陣列已滿,您可以隨意使用它。它什麼都不做,只是把數字分解成一個數組。 – ssell

1

以下示例根據需要將位存儲到原始C風格的數組。但是如果你願意的話,你可以用std :: vector替換它。

int main() 
{ 
    // assume sizeof(int) is 32, or you can use heap-allocated array or std::vector 
    int array[32]; 

    unsigned int mask = 1; 
    // mask is initially 0x80000000 
    mask = mask << (sizeof(int)*8 - 1); 

    int i = 0; 

    // we start counting from the first "1", 
    // preceding "0"s are ignored to display 
    bool started = false; 

    int b; 
    cin >> b; 

    while (mask != 0) 
    { 
    // if current bit is "1" or "0" 
    if (mask & b) 
    { 
     started = true; 
     array[i++] = 1; 
    } 
    // if current bit is "0" and counting started 
    else if (started) 
    { 
     array[i++] = 0; 
    } 
    // ready to test next bit 
    mask = mask >> 1; 
    } 

    // test result 
    for (int j = 0; j < i; ++j) cout << array[j]; 

    cout << endl; 
    return 0; 
} 

Test cases: 
1. b = 8 => array: 1000 
2. b = -8 => array: 11111111111111111111111111111000 
3. .. 
0

存儲二進制數到一個數組


char binaryArray [5]; // The array looks like this: [][][][][] 

cout << "Enter binary number: "; 
cin >> binaryArray; // Stores the binary number into the array: [1][0][1][0][0] 

cout << binaryArray[0] << endl; // The first element is sent to standard output. 
cout << binaryArray[1] << endl; // The second element is sent to standard output. 

您的輸入輸出將是:

1 
0 

在這裏我們有一個字符數組。我們將二進制數輸入到數組中,然後打印數組中的每個元素以顯示每一位。第一條打印線訪問第一個元素[1] [0] [1] [0] [0]。第二條打印線訪問第二個元素[1] [0] [1] [0] [0]。

假設我們有一個包含100個字符的二進制數字。我們輸出數組的每個元素的方式需要很長時間。

1.)你能想出一個更有效的方法來打印出我們陣列的內容嗎?

2.)我們如何確保用戶只輸入一個和/或零?

+0

嘿非常感謝它真正幫助的代碼,但這是我程序的開始,它讓我開始。我的程序要做的是讀取輸入的二進制數,然後對於每個1 c1 ++ cout該數字返回它,反之亦然0除了c0 ++ rand(1,c1)。我想要做的是輸出「狀態」,因爲從二進制輸入我將顯示狀態。所以例如你的二進制數爲100,它將是無效的,因爲有更多的0比1 + 1。如果我輸入10100,輸出將是1,2,rand(1,c1),3,rand(1,c1),rand(1,c1)。得到我必須做的事情?大聲笑 – Junior89

+0

等100不會無效,對不起 – Junior89

相關問題