无法在C++; 我试图学习C++中的代码,我来自C背景。 我写了一个小方法来添加两个二进制数,虽然程序运行良好,我能够看到正确的结果,但我不能将“和”打印为字符串。 而我可以将“和”打印为数组。 有人能帮我告诉我我错过了什么吗
这是代码-无法在C++; 我试图学习C++中的代码,我来自C背景。 我写了一个小方法来添加两个二进制数,虽然程序运行良好,我能够看到正确的结果,但我不能将“和”打印为字符串。 而我可以将“和”打印为数组。 有人能帮我告诉我我错过了什么吗,c++,string,C++,String,这是代码- #include <iostream> #include <string> #include <algorithm> using namespace std; using std::string; class addBinaryClass { private: string sum; public: addBinaryClass() { for(int i=0;i<255;i++)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
using std::string;
class addBinaryClass
{
private:
string sum;
public:
addBinaryClass()
{
for(int i=0;i<255;i++)
sum[i] = '0';
}
string addBinary(string a, string b)
{
int l1 = a.length();
int l2 = b.length();
int i=0,j=0,k=0,carry=0;
int num1,num2;
i = l1-1;
j= l2-1;
while ( (i>=0) || (j>=0))
{
if(l1>0)
num1 = (a[i] -'0');
else
num1=0;
if(l2>0)
num2 = (b[j] - '0');
else
num2=0;
sum[k] = num1 + num2 + carry ;
carry = sum[k] / 2;
sum[k] = (sum[k] % 2) + '0';
l1--;l2--;i--;j--,k++;
}
sum[k] = (sum [k] + carry);
reverse(sum.begin(), sum.end());
cout << "result is " << sum << endl;
for(int i=0;i<=7;i++)
cout << sum[i];
cout << endl;
return sum;
}
void printBinary()
{
int l=sum.length();
cout << "Binary sum "<< endl;
cout << "length " << l << sum << endl;
cout << endl;
cout << "addBinaryEnd" << endl;
}
void setString()
{
sum = "";
}
};
int main()
{
addBinaryClass s;
s.setString();
string name = "Add Binary begin";
cout << name << endl;
string result = s.addBinary("10001","10111");
s.printBinary();
return 0;
}
我不明白的是为什么字符串的长度是0。本例中的总和似乎为空。我是否需要在结尾追加空字符 您从未更改过字符串的大小。你所有的
sum[i]=…
赋值都没有做你认为他们在做的事情:)你意识到你在给字符串赋值int而不是char,对吗?另外,您是否考虑过使用字符串的填充构造函数而不是该循环?字符串(大小n,字符c);当我看到像l1--;l2--;我--;j--,k++代码>我立刻变得非常担心。这段代码应该是这么模糊吗?C++是一个棘手的事情,首先要正确,所以不要让你的生活变得更困难,因为有大量的变量有无谓的名字。code>将整个std
命名空间拉入全局命名空间。这使得使用std::string代码>无意义。使用sum[i]
可以访问字符串的元素i,但在代码中没有任何地方可以增加该字符串的大小(它仍然是空的)。
Add Binary begin
sum is
00010100
Binary sum
length 0
addBinaryEnd