C++ 像字符一样用Int填充数组;C++;,cin对象
这是一个相当简单的问题;第一次的海报和长期的旁观者 这是我写的二进制到十进制的转换器:C++ 像字符一样用Int填充数组;C++;,cin对象,c++,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];
#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;
}
#包括
#包括
使用名称空间std;
常数int MAX=6;
int conv(int z[MAX],int l[6],int MAX);
int main()
{
int-zelda[MAX];
常数int d=6;
int-link[d];
cout>zelda[i]).get()//输入循环
{
++一,;
}
cout=0;--h,++i)
if(zelda[t]==1)
链路[h]=功率(2.0,i);
其他的
链路[h]=0;
总和+=链路[t];
}
回报金额;
}
按照处理输入循环的方式,我必须在每次输入数字后按enter键。我还没有添加任何错误更正(我的一些变量是模糊的),但我想输入一个二进制文件,比如111111,而不是1 enter、1 enter、1 enter等来填充数组。我愿意接受任何技巧和其他建议。也许将其作为字符串输入并将其转换为int
我会继续研究的。谢谢 您可以通过以下方式读取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),即数字0表示为48,数字1表示为49,依此类推。因此,当您减去“0”的表示形式时,就得到了实际的数字。读取数据(并用
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;
}
无符号整数转换(常量std::string&s)
{
//也许可以检查s.size()您的变量命名是否最有趣。您的整个输入逻辑非常模糊。您为什么不简单地读取一个字符串,该字符串应仅由1
s和0
s组成,并将其转换为最佳变量命名法EVAR:)(必须发布此注释:))谢谢各位程序员。老实说,我没有太多考虑--,你应该用Master Swarm Dully返回你的总和。我喜欢这种方法,但我可能必须使用endian格式。肯定有一些想法。切换注释版本zelda[MAX-(I+1)]
而不是zelda[I]
,然后你切换。这一切都很好。我如何提高你的声誉?我不知道我是否可以在我的低级别上。只需单击向上箭头向上投票答案,然后单击V标记接受答案,所有用户都可以向上投票并接受答案。啊,我刚刚尝试过,但我需要15个代表。我仍然需要了解这个论坛的内部运作。我我将阅读该链接,并从另一个角度了解如何解决这个问题。似乎以字符串形式输入是最好的方法。
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;
}