我目前有两个编码项目,这两个项目给我带来了一些我无法弄清楚的奇怪麻烦。我花了几个小时搞乱每件小事来尝试修复它们,它们似乎没有用完。
第一个是一个简单的程序,用于单步执行.txt文件并为字符赋值,并添加到打印的totalvalue。 '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()。代码中的注释都来自我的TA,以提供有关制作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中它什么都不打印。)
提前感谢任何帮助我的人。我只是对此感到难过。此外,尽可能地模糊。只是一些指示可能有所帮助。我确定第一个是一些小的语法错误或类似的东西,但我根本找不到它。
答案 0 :(得分:3)
为什么使用作业=
运算符?
main.c
while(txtfile >> indicator)
{
if (indicator = '.')
{
currentvalue = 0;
}
// SNIP!
}
当然你的意思是:
while(txtfile >> indicator)
{
if (indicator == '.')
{
currentvalue = 0;
}
// SNIP!
}
=
和==
之间的巨大差异,一个是作业,另一个是内容的等式检查。
答案 1 :(得分:1)
解决了你的第一个问题,你分配指标而不是比较它,所以你总是得到0.还有,我整理了一下。
#include <iostream>
#include <fstream>
using namespace std;
int getValue(char indicator)
{
int value = 0;
switch(indicator)
{
case 'Z': value++;
case 'Y': value++;
case 'X': value++;
case 'W': value++;
case 'V': value++;
case 'U': value++;
case 'T': value++;
case 'S': value++;
case 'R': value++;
case 'Q': value++;
case 'P': value++;
case 'O': value++;
case 'N': value++;
case 'M': value++;
case 'L': value++;
case 'K': value++;
case 'J': value++;
case 'I': value++;
case 'H': value++;
case 'G': value++;
case 'F': value++;
case 'E': value++;
case 'D': value++;
case 'C': value++;
case 'B': value++;
case 'A': value++;
break;
default: value = 0;
}
return value;
}
int main()
{
string filename;
ifstream txtfile;
char indicator;
int currentvalue,
totalvalue = 0;
cin >> filename;
txtfile.open(filename.c_str());
while(txtfile >> indicator)
{
if (indicator == '.') // = is for assignment, == is for comparison
currentvalue = 0;
else if (indicator == '-')
currentvalue = 0;
else
currentvalue = getValue(indicator);
totalvalue += currentvalue;
}
cout << totalvalue << endl;
return 0;
}
我的输入得到30分:)