1

そこで、ユーザーが入力する多項式クラスを開発してきました:1x ^ 0 + 2x ^ 1 + 3x ^ 2 ...および1,2,3(係数)はint配列に格納されます

オーバーロードされた+および-関数は機能しますが、*は機能しません。入力に関係なく、
(5x ^ 0 + x ^ 1)*(-3x ^ 0 + x ^ 1)= -15x ^ 0 + 2x ^ 1 + 1x ^ 2
または(x +5)(x-3)= x ^ 2 + 2x-15

私は次のようなオーバーロードされた*関数を使用しています:Polynomial multiply = one * two;
長いintを使用しているため、問題はstrtol(p、&endptr、10)であると推測していますが、加算と減算は完全に機能します

私のコンストラクター

Polynomial::Polynomial(char *s)
{
    char *string;
    string = new char [strlen(s) + 1];
    int length = strlen(string);
    strcpy(string, s);

    char *copy;
    copy = new char [length];
    strcpy(copy, string);

    char *p = strtok(string, "  +-");
    counter = 0;
    while (p) 
    {
        p = strtok(NULL, "  +-");
        counter++;
    }

    coefficient = new int[counter];

    p = strtok(copy, "  +");
    int a = 0;
    while (p)
    {
        long int coeff;
        char *endptr;
        coeff = strtol(p, &endptr, 10); //stops at first non number
        if (*p == 'x')
           coeff = 1;

        coefficient[a] = coeff;
        p = strtok(NULL, "  +");
        a++;
    }
}

およびオーバーロードされた*関数

Polynomial Polynomial::operator * (const Polynomial &right)
{
    Polynomial temp;

    //make coefficient array
    int count = (counter + right.counter) - 1;
    temp.counter = count;
    temp.coefficient = new int [count];
    for (int i = 0; i < counter; i++)
    {
        for (int j = 0; j < right.counter; j++)
            temp.coefficient[i+j] += coefficient[i] * right.coefficient[j];
    }
    return temp;
}

そしてここに私のコード全体があります:http://pastie.org/721143

4

4 に答える 4

7

temp.coefficient[i+j]でゼロに初期化するようには見えませんoperator * ()

temp.coefficient = new int [count];
std::memset (temp.coefficient, 0, count * sizeof(int));
于 2009-12-01T01:00:15.613 に答える
5

-842150450を16進数に変換して、デバッグビルドのCRTで使用されているマジック値の1つを見つけます。これは、コードのバグを見つけるのに役立ちます。

    temp.coefficient = new int [count];
    // Must initialize the memory
    for (int ix = 0; ix < count; ++ix) temp.coefficient[ix] = 0;

他にもたくさんのバグがあります。頑張って修正してください。

于 2009-12-01T01:13:07.333 に答える
1

しますか

temp.coefficient = new int [count];

ゼロの配列を与えますか?

それ以外の場合は、forループでガベージに何かを追加しています。

于 2009-12-01T01:00:37.733 に答える
1

交換

temp.coefficient = new int [count];

temp.coefficient = new int [count]();

配列値をゼロ初期化するため。

于 2011-02-03T12:40:36.500 に答える