嘿伙计们,我正在尝试练习C ++,而这样做我在代码中遇到了问题。我动态创建一个字符数组,然后对于每个数组索引,我想用一个整数填充该元素。我尝试将整数转换为字符,但这似乎不起作用。打印出数组元素后,什么都没有出来。我很感激任何帮助,我对此很新,谢谢。
char *createBoard()
{
char *theGameBoard = new char[8];
for (int i = 0; i < 8; i++)
theGameBoard[i] = (char)i; //doesn't work
return theGameBoard;
}
以下是我最终如何做到这一点。
char *createBoard()
{
char *theGameBoard = new char[8];
theGameBoard[0] = '0';
theGameBoard[1] = '1';
theGameBoard[2] = '2';
theGameBoard[3] = '3';
theGameBoard[4] = '4';
theGameBoard[5] = '5';
theGameBoard[6] = '6';
theGameBoard[7] = '7';
theGameBoard[8] = '8';
return theGameBoard;
}
答案 0 :(得分:14)
基本上,你的两段代码并不完全相同。
当您设置 theGameBoard [0] ='0'时,您实际上将其设置为值48(字符“0”的ASCII代码)。因此,如果 i = 0 ,设置 theGameBoard [0] =(char)i 并不完全相同。你需要在ASCII表(48)中添加'0'的偏移量,这样theGameBoard [0]实际上是0 +字符'0'的偏移量。
这是你如何做到的:
char *createBoard()
{
char *theGameBoard = new char[8];
for (int i = 0; i < 8; i++)
theGameBoard[i] = '0' + (char)i; //you want to set each array cell
// to an ASCII numnber (so use '0' as an offset)
return theGameBoard;
}
另外,就像@Daniel所说:确保在完成使用返回的变量后,释放你在此函数中分配的内存。像这样:
int main()
{
char* gameBoard = createBoard();
// you can now use the gameBoard variable here
// ...
// when you are done with it
// make sure to call delete on it
delete[] gameBoard;
// exit the program here..
return 0;
}
答案 1 :(得分:3)
你的第二个功能有一个错误的错误。您分配长度为8的数组,但是将9个值复制到其中。 (0,1,2,3,4,5,6,7,8)。
答案 2 :(得分:2)
如果我这样做,我会使用stringstream。它可能是重量级的,但它是C ++的做事方式。
for (int i = 0; i < 8; ++i) {
stringstream sstream;
sstream << i;
sstream >> theGameBoard[i];
}
使用完游戏板阵列后,需要使用以下命令将其删除:
delete[] theGameBoard;
答案 3 :(得分:0)
在字符数组中,您必须存储数字的ASCII值。
例如: ASCII值'0'是48(不是0) ASCII值'1'是49(不是1) ...
在C ++(以及几乎所有其他语言)中,您可以获得字符的ASCII值,将其放在单引号中('0'== 48,'1'== 49,'2'== 50,......)
您的数组必须具有值
theGameBoard[0] = '0'
theGameBoard[1] = '1' or theGameBoard = '0' + 1
...
填充阵列的代码:
for(int k=0;k<8;++k)
theGameBoard[k] = '0' + k;