大数类运算符重载问题

编译器里输出正常,但网页提交平台就是乱码

而且本应调用拷贝构造函数输出的copyconstructor run也没有输出

不知道哪里出了毛病 不会改了

这是样例

img


这是我的输出

img


#include <iostream>
using namespace std;
#define N 100
#include <cstring>
int index(char c[])
{
    int i;
    for (i = 0; c[i] != '\0'; i++)
    {
    }
    return i;
}
class BigNum
{
private:
    char num[N];

public:
    BigNum(char c[] = {"+0"});
    BigNum(const BigNum &);
    ~BigNum();
    void setNum(char c[]);
    char const *getNum(void) const;
    void show() const;
    BigNum operator+(BigNum &);
    BigNum operator-(BigNum &);
};
BigNum::BigNum(char c[])
{
    int length = index(c);
    char str[length + 1];
    if (c[0] != 45)
    {
        str[0] = 43;
    }
    strcpy(num, strcat(str, c));
    cout << "BigNum Constructor run" << endl;
}
BigNum::BigNum(const BigNum &b)
{
    strcpy(num, b.num);
    cout << "BigNum CopyConstructor run" << endl;
}
BigNum::~BigNum()
{
    cout << "BigNum Destructor run" << endl;
}
void BigNum::setNum(char c[])
{
    int length = index(c);
    char str[length + 1];
    if (c[0] != 45)
    {
        str[0] = 43;
    }
    strcpy(num, strcat(str, c));
}
char const *BigNum::getNum(void) const
{
    return num;
}
void BigNum::show() const
{
    cout << "BigNum(" << num << ")" << endl;
}
BigNum BigNum::operator-(BigNum &b)
{
    int i;
    BigNum tmp;
    if ((num[1] - b.num[1]) > 0)
    {
        tmp.num[0] = 43;
        for (i = 1; num[i] != '\0'; i++)
        {
        tmp.num[i] = -num[i] + b.num[i] + '0';
        }
    }
    else
    {
        tmp.num[0] = 45;
        for (i = 1; num[i] != '\0'; i++)
        {
            tmp.num[i] = -num[i] + b.num[i] + '0';
        }
    }
    tmp.num[i] = '\0';
    return tmp;
}
BigNum BigNum::operator+(BigNum &b)
{
    int i;
    BigNum tmp;
    tmp.num[0] = 43;
    for (i = 1; num[i] != '\0'; i++)
    {
        tmp.num[i] = num[i] + b.num[i] - '0';
    }
    tmp.num[i] = '\0';
    return tmp;
}
int main(void)
{
    char c[100], op;
    cin >> c;
    BigNum b1(c), b2(b1);
    b1.show();
    cin >> c;
    b2.setNum(c);
    b2.show();
    cin >> op;
    if (op == '+')
        (b1 + b2).show();
    if (op == '-')
        (b1 - b2).show();
    return 0;
}