0

我正在尝试将指针存储在数组中。

我指向指针的指针是类对象是:

classType **ClassObject;

所以我知道我可以像这样使用 new 运算符来分配它:

ClassObject = new *classType[ 100 ] = {};

我正在阅读一个带有标点符号的文本文件,这是我目前所拥有的:

// included libraries
// main function
// defined varaibles

classType **ClassObject; // global object
const int NELEMENTS = 100; // global index


wrdCount = 1;  // start this at 1 for the 1st word
while ( !inFile.eof() )  
{
   getline( inFile, str, '\n' );  // read all data into a string varaible
   str = removePunct(str);  // User Defined Function to remove all punctuation.
   for ( unsigned x = 0; x < str.length(); x++ )
   {
       if ( str[x] == ' ' ) 
       {
          wrdCount++;  // Incrementing at each space
          ClassObject[x] = new *classType[x];
       // What i want to do here is allocate space for each word read from the file.

       }
   }
}
// this function just replaces all punctionation with a space
string removePunct(string &str) 
{ 
    for ( unsigned x = 0; x < str.length(); x++ )
        if ( ispunct( str[x] ) )
            str[x] = ' ';
  return str;
}

// Thats about it.

我想我的问题是:

  • 我是否为文件中的每个单词分配了空间?
  • 我将如何在我的 while/for 循环中的 ClassObject 数组中存储一个指针?
4

3 回答 3

3

如果您使用 C++,请使用Boost 多维数组库

于 2009-04-12T02:34:40.663 回答
1

嗯,我不确定你想做什么(尤其是 new *classType[x] - 这甚至可以编译吗?)

如果你想要每个单词都有一个新的 classType,那么你可以去

ClassObject[x] = new classType; //create a _single_ classType
ClassObject[x]->doSomething();

前提是 ClassObject 已初始化(如您所说)。

你说你想要一个二维数组 - 如果你想这样做,那么语法是:

ClassObject[x] = new classType[y]; //create an array of classType of size y
ClassObject[0][0].doSomething(); //note that [] dereferences automatically

但是,我也不确定你所说的 new *classType[ 100 ] = {}; 是什么意思。- 花括号在那里做什么?好像应该是

classType** classObject = new classType*[100];

不过,我强烈建议你使用其他东西,因为这真的很讨厌(而且你必须注意删除......呃)

使用 vector<>s 或如上面的海报所建议的那样,使用 boost 库。

于 2009-04-12T03:08:02.020 回答
0

除了一行之外,您的代码非常好: ClassObject[x] = new *classType[x]; 星 * 需要消失,您可能想说的是您希望 ClassObject 被索引到字数而不是 x。

将该行替换为: ClassObject[wrdCount] = new classType[x];

希望有帮助,Billy3

于 2009-04-12T03:15:27.587 回答