无法将整数转换为Char数组中的Char

时间:2009-07-01 22:05:11

标签: c++

嘿伙计们,我正在尝试练习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;    
}    

4 个答案:

答案 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;