我目前有两个编码项目,这两个项目都给我带来了我无法弄清楚的奇怪麻烦。我花了几个小时搞乱每件小事来尝试修复它们,但它们似乎并没有奏效。
第一个是一个简单的程序,通过一个 .txt 文件单步执行并为字符分配值,添加到总值,然后打印出来。'A'-'Z' 分别是 1-26 的值,'-' 是 0,'.' 也是 0。一个示例 .txt 文件将是:
...............
..-............
.........A.....
..Z.........C..
这里的答案是 30。最初我得到“30%”作为输出,在弄乱它试图摆脱随机的“%”时,我不知何故把我的逻辑搞砸了,现在它只是输出“每个文件的 0%”。这是我的代码:
#include <iostream>
#include <fstream>
#include <cmath>
#include <math.h>
#include <vector>
using namespace std;
int getValue(char indicator)
{
int value;
if (indicator = 'A')
{
value = 1;
}
else if (indicator = 'B')
{
value = 2;
}
else if (indicator = 'C')
{
value = 3;
}
else if (indicator = 'D')
{
value = 4;
}
else if (indicator = 'E')
{
value = 5;
}
else if (indicator = 'F')
{
value = 6;
}
else if (indicator = 'G')
{
value = 7;
}
else if (indicator = 'H')
{
value = 8;
}
else if (indicator = 'I')
{
value = 9;
}
else if (indicator = 'J')
{
value = 10;
}
else if (indicator = 'K')
{
value = 11;
}
else if (indicator = 'L')
{
value = 12;
}
else if (indicator = 'M')
{
value = 13;
}
else if (indicator = 'N')
{
value = 14;
}
else if (indicator = 'O')
{
value = 15;
}
else if (indicator = 'P')
{
value = 16;
}
else if (indicator = 'Q')
{
value = 17;
}
else if (indicator = 'R')
{
value = 18;
}
else if (indicator = 'S')
{
value = 19;
}
else if (indicator = 'T')
{
value = 20;
}
else if (indicator = 'U')
{
value = 21;
}
else if (indicator = 'V')
{
value = 22;
}
else if (indicator = 'W')
{
value = 23;
}
else if (indicator = 'X')
{
value = 24;
}
else if (indicator = 'Y')
{
value = 25;
}
else if (indicator = 'Z')
{
value = 26;
}
return value;
}
int main()
{
string filename;
ifstream txtfile;
char indicator;
int currentvalue;
int totalvalue = 0;
cin >> filename;
txtfile.open(filename.c_str());
while(txtfile >> indicator)
{
if (indicator = '.')
{
currentvalue = 0;
}
else if (indicator = '-')
{
currentvalue = 0;
}
else
{
currentvalue = getValue(indicator);
}
totalvalue += currentvalue;
}
cout << totalvalue;
return 0;
}
我的第二个问题可能有点复杂。该程序将十进制转换为二进制。我只能制作自己的函数并编辑 dec2bin 函数。其他一切都是禁止的,包括 int main()。代码中的注释均来自我的助教,提供制作 dec2bin 函数的技巧。我已经制作了指数函数,因为我们不允许添加任何额外的#includes。我将首先显示我的代码,然后显示输出的样子。
#include <iostream>
#include <string>
using namespace std;
bool isdecimal(string &input)
{
// see bin2dec for description of how the below code works
return input.find_first_not_of("0123456789") == string::npos;
}
void reverse(string &input)
{
int n = input.length();
for (int k=0; k<n/2; k++)
swap(input[k], input[n-1-k]);
}
int exponential(int &exponent)
{
int multiple = 1;
for (int i = 0; i < exponent; i++)
{
multiple *= 10;
}
return multiple;
}
string dec2bin(string &decstr)
{
// convert string decstr to integer decval:
// 1) reverse to obtain LSB-MSB digit order
reverse(decstr);
// 2) for each ascii digit, subtract '0' to
// obtain integer value, multiply by 10^k
// and continually add result to decval
unsigned int i;
int addval = 0;
int remainder = 0;
int decval = 0;
int currentval = 0;
char binchar;
string newstring = "";
for (i = 0; i < decstr.size(); i++)
{
currentval = (decstr[i] - '0');
addval = currentval * exponential(i);
decval += addval;
}
// apply successive-halving
while(decval > 0) {
remainder = decval % 2;
decval = decval / 2;
binchar = remainder;
newstring.push_back(binchar);
}
// reverse to restore MSB-LSB bit order
reverse(newstring);
return newstring;
}
int main()
{
string decstr;
while (cin >> decstr) {
if (isdecimal(decstr) == false)
cout << "input error\n";
else
cout << dec2bin(decstr) << "\n";
}
}
由于我不允许发布图像,我将描述我的输出是什么样的。无论我输入的整数是什么,它都会返回一些空格和奇怪的方形笑脸的组合(我为此使用 CodeLite,在 Unix 中它什么也不打印。)
提前感谢任何帮助我的人。我只是难住了这一点。另外,请尽可能含糊其辞。只是一些指针可能会有所帮助。我确定第一个是一些小的语法错误或类似的东西,但我根本找不到它。