像Char一样用Int填充数组; C ++,cin对象

时间:2011-11-25 01:26:36

标签: c++

这是一个非常简单的问题;第一次海报和长时间的观察。

这是我写的二进制到十进制转换器:

#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 6;
int conv(int z[MAX], int l[6], int MAX);

int main()
{
    int zelda[MAX];
    const int d = 6;
    int link[d];

    cout << "Enter a binary number: \n";  
    int i = 0;
    while (i < MAX && (cin >> zelda[i]).get())  //input loop
    {
        ++i;
    }   

    cout << conv(zelda, link, MAX);

    cin.get();
    return  0;
}

int conv(int zelda[MAX], int link[6], int MAX)
{   
    int sum = 0;
    for (int t = 0; t < MAX; t++)
    {
        long int h, i;
        for (int h = 5, i = 0; h >= 0; --h, ++i)
            if (zelda[t] == 1)
                link[h] = pow(2.0, i);
            else
                link[h] = 0;
            sum += link[t]; 
    }
    return sum;
}

通过输入循环的处理方式,我必须在每次输入数字后按Enter键。我还没有添加任何纠错(我的一些变量是模糊的),但想输入二进制说111111而不是1输入,1输入,1输入等填充数组。我对任何技术和其他建议持开放态度。也许将其输入为字符串并将其转换为int?

我会继续研究。谢谢。

2 个答案:

答案 0 :(得分:2)

要读取数据see this related question(并按std::cin替换文件流)。

要转换,您可以做一些简单的事情:

unsigned int convert(const std::string & s)
{
  // maybe check that s.size() <= CHAR_BIT * sizeof(unsigned int)

  unsigned int result = 0;

  for (std::string::const_reverse_iterator rit = s.rbegin(), rend = s.rend(); rit != rend; ++rit)
  {
    result *= 2;

    if (*rit == '1') ++result;

    else if (*rit != '0') { /*error!*/ return -1; }
  }

  return result;
}

答案 1 :(得分:1)

你可以读取一个int并以这种方式解析它:

int number = 0;

cin >> number;
int i = 0;
while(i < MAX)
{
    if(number > 0)
    {
        zelda[i] = number % 10; // or you can switch to zelda[MAX-(i+1)]
        number = number/10;
    else
    {
        zelda[i] = 0;
    }
    i++;
}

编辑:
请注意,此转换采用小端格式,这意味着如果键入int'100',则zelday将填充'001'。

EDIT2:
如果您想从字符串中获取它,请执行此操作,假设zelda具有相同大小的str

string str ("111000");
int i;
for (i=0; i < str.length(); i++)
{
    zelda[i] = (str[i] - '0');
}

这是有效的原因:
char列表中表示的数字是顺序的(在本例中为ASCII),即数字零表示为48,数字1表示为49,依此类推。因此,当您减去'0'的表示时,您将得到实际数字。

相关问题