0

我目前正在使用动态数组在 MU 游戏上编写代码,但在打印序列时遇到了问题。

规则:如果第一个字符用字符 M 表示,序列的其余部分用 R 表示,则新序列是 MRR。

示例包括:

当前序列:MIUI

新序列:MIUIIUI

当前序列:MUM

新序列:妈妈

当前序列: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,这个字符串的长度是5。(应该是MUMUM)

输入:MIUI

输出:MIUI,这个字符串的长度是7。(应该是MIUIIUI)

到目前为止,我所做的是分配了一个具有新大小的新动态数组,并相应地将值添加到数组中。但是,我不知道问题出在 applyRule2 函数还是 printarray 函数中。

如果有人能指出我正确的方向,将不胜感激。

4

2 回答 2

0

您的代码中有一些错误。正如 Alf 所说,你真的应该使用std::string. 但无论如何这里有一些错误。

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

应该

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

==当你应该写一个 equals 时,你有一个 double equals =。你的编译器应该已经警告你了,注意编译器警告。

另一个错误

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

应该

char *resultant = applyRule2(userinput, size);

您编写的代码分配了一些内存,然后在下一行它丢弃了该内存,而是使用您在applyRule2. 所以这实际上不是一个错误,但它是一种资源浪费。你的程序永远不会收回浪费的内存。这称为内存泄漏

于 2013-04-11T12:34:19.317 回答
0

只需使用std::string而不是原始数组和原始指针和new

于 2013-04-11T12:23:44.277 回答