我目前正在使用动态数组在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;
}
问题是当我运行程序时,我的输出是这样的:
输入:M U M
输出:M U M,此字符串的长度为5.(应该是M U M U M)
输入:M I U I
输出:M I U I,这个字符串的长度是7.(应该是M I U I I U I)
到目前为止,我所做的是我分配了一个具有新大小的新动态数组,并相应地将值添加到数组中。但是,我不知道问题出在applyRule2函数还是printarray函数中。
如果有人能指出我正确的方向,我将不胜感激。
答案 0 :(得分:0)
只使用std::string
而不是原始数组和原始指针new
答案 1 :(得分: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];
}
当你应该写一个等于==
时,你有一个双等于=
。您的编译器应该已经警告过您,请注意编译器警告。
另一个错误
char *resultant = new char[newsize];
resultant = applyRule2(userinput, size);
应该是
char *resultant = applyRule2(userinput, size);
您编写的代码会分配一些内存,然后在下一行中抛弃该内存,而是使用您在applyRule2
中分配的内存。所以这实际上不是一个bug,但它浪费了资源。你的程序永远不会收回浪费的内存。这称为内存泄漏。