0

現在、動的配列を使用して MU ゲームでコードを作成していますが、シーケンスの印刷に問題があります。

規則: 最初の文字が文字 M で示され、シーケンスの残りが R で示される場合、新しいシーケンスは MRR です。

例は次のとおりです。

現在のシーケンス: MIUI

新しいシーケンス: MIUIIUI

現在のシーケンス: MUM

新しいシーケンス: MUMUM

現在のシーケンス: MU

新しいシーケンス: MUU

ここに私のコードのスニペットがあります:

主に:

if (userchoice == 2)
{
    if (rule2valid == false)
    {
        cout << "This rule may not be applied to your input." << endl;
        return 0;
    }       
    int newsize = size + size - 1;
    char *resultant = new char[newsize];
    resultant = applyRule2(userinput, size);
    printarray (resultant, newsize);
}   

ルールを適用する関数内:

char *applyRule2(char* sequence, int size)
{
int newsize = size + size - 1;
int j = 1;

char* applyRule = new char[newsize];
for (int i = 0; i < size; i++)
    applyRule[i] = sequence[i];
for (int i = size; i < newsize; i++)
{
    applyRule[i] == sequence[j];
}   
return applyRule;
}

および印刷機能:

void printarray(char* sequence, int size)
{
for (int i = 0; i < size; i++){
cout << sequence[i] << "\t";    
}
cout << "The length of this array is : " << size;
cout << endl;
}

問題は、プログラムを実行すると、出力が次のようになることです。

入力: MUM

出力: MUM、この文字列の長さは 5 です (MUMUM と想定)

入力: MIUI

出力: MIUI、この文字列の長さは 7 です (MIUIIUI と想定)。

これまでに行ったことは、新しい動的配列を新しいサイズで割り当て、それに応じて配列に値を追加したことです。しかし、問題が applyRule2 関数にあるのか、printarray 関数にあるのか、私は途方に暮れています。

誰かが私を正しい方向に向けることができれば幸いです。

4

2 に答える 2

0

std::string生の配列と生のポインターの代わりに使用するだけで、new

于 2013-04-11T12:23:44.277 に答える
0

コードにいくつかのエラーがあります。アルフが言うように、本当に使用する必要がありますstd::string。とにかくここにいくつかのエラーがあります。

for (int i = size; i < newsize; i++)
{
    applyRule[i] == sequence[j];
}

する必要があります

for (int i = size; i < newsize; i++)
{
    applyRule[i] = sequence[j];
}

==1 つの equals を書くべきだったときに、2つの equals があり=ました。コンパイラはこれについて警告しているはずです。コンパイラの警告に注意してください。

別のエラー

char *resultant = new char[newsize];
resultant = applyRule2(userinput, size);

する必要があります

char *resultant = applyRule2(userinput, size);

あなたが書いたコードはいくらかのメモリを割り当て、次に次の行でそのメモリを捨て、代わりに で割り当てたメモリを使用しますapplyRule2。したがって、これは実際にはバグではありませんが、リソースの浪費です。あなたのプログラムは無駄なメモリを取り戻すことはありません。これはメモリ リークと呼ばれます。

于 2013-04-11T12:34:19.317 に答える