【发布时间】:2015-06-13 18:36:25
【问题描述】:
我有一个家庭作业要实现一个公牛和奶牛游戏类,我们的导师给了我们一个标题,我们必须实现它,里面有这个功能
char* TryToGuess(int);
它的作用是接收一个 int 并返回 char*,其中包含您猜到的公牛和奶牛的数量。我所做的是创建一个字符串,传递其中的所有信息,然后将其转换为 char*,如下所示:
string result = "Cows:";
char c = char(cows + '0');
result += c;
result += " Bulls:";
char b = char(bulls + '0');
result += b;
char* finalResult = new char[18];
strcpy(finalResult, result.c_str());
return finalResult;
我们还有一个名为 start 的函数,用于执行我们的游戏,我的代码是
char* result;
int guess;
do
{
cout << "Your guess:";
cin >> guess;
result = TryToGuess(guess);
cout << "\t\t\t[" << guess << "] => " << result << endl;
} while (result != "Congarulations! You made a right guess!");
cout << "\n\n\t\t It took you " << numberOfGuesses << " guesses to finish the game.\n";
问题是存在内存泄漏,我不知道将 delete[] 放在哪里,它不能在循环内,因为不会满足 while 中的条件。提前感谢您的帮助。
PS:我不能把返回类型改成字符串,我的导师是这样设置的。
PS2:这是完整的标题
#ifndef BULLSANDCOWS_H_
#define BULLSANDCOWS_H_
class BullsAndCows
{
public:
BullsAndCows(int = 4);
BullsAndCows(int[], int);
void SetContainerSize(int);
void SetContainer(int*);
bool IsInsideContainer(int);
bool CowElement(int*, int, int);
bool BullElement(int*, int, int);
char* TryToGuess(int);
void start();
// void print();
private:
int sizeOfContainer;
int* numbersContainer;
int numberOfGuesses;
};
#endif // BULLSANDCOWS_H_
【问题讨论】:
-
char c = char(cows + '0');是否有cows变量? -
是的,这只是代码的结尾,我确定它只是一个数字
-
在函数内部使用
std::string似乎很奇怪,然后返回char*获取结果。此外,您将cows和bulls转换为字符的方式只有在每个字符少于 10 个时才有效。 -
你能显示完整的标题吗?另外,我怀疑你被教坏习惯(事实上,这似乎是c++ 考虑到
cout的用法,但随后你被要求使用原始指针来表明这一点) -
1) 您不能将
char*与==进行比较,就像您在while条件下所做的那样,请使用strcmp。 2)在这种情况下,没有单一的解决方案。你可以用NULL初始化result,把if条件放在循环的开头,如果result不为空,那么做delete。 3)您还需要正确分配内存。字符串的大小并不总是 18。