动态创建的数组

时间:2010-04-26 21:54:38

标签: c++ arrays dynamic pointers allocation

我的任务包括两部分。首先,我必须创建100个元素的globbal char数组,并使用cin为其插入一些文本。然后计算字符数量,并创建具有输入文本长度的专用数组。我正在考虑以下解决方案:

char[100]inputData;

int main()
{  

   cin >> inputData >> endl;

   int length=0;
   for(int i=0; i<100; i++)
   {
           while(inputData[i] == "\0")
           {
               ++count;
           }
   }
char c = new char[count];

我认为好吗?

第二部分任务是在第一个程序中引入动态创建的指向所有插入单词的指针数组。添加新单词应该打印所有前面的单词,如果下一个单词没有空格,则inputData数组的大小应该增加两倍。说实话,这对我来说太过分了。我怎么能特意创建单词的指针?如何在不丢失内容的情况下增加全局数组的大小?有一些临时数组?

3 个答案:

答案 0 :(得分:2)

无论您的其他问题是什么,您似乎都对while循环有一些不正确的想法。我们来看看这段代码。

for(int i=0; i<100; i++) {
    while(inputData[i] == "\0") {
        ++count;
    }
}

首先,"\0"不是NUL角色。它是一个指向仅包含终止NUL字节的字符串的指针。您想要'\0'。假设这种变化,仍然存在问题。让我们解决将要发生的事情:

  • while循环如何工作?只要条件为真,它就会重复执行。
  • while循环什么时候结束?当通过执行正文最终使条件变为假时。
  • 你的循环状况如何? inputData[i] == '\0',经过更正。
  • 身体是什么? ++count
  • ++count可以改变条件的值吗?不,因为它不会改变i
  • 因此,如果inputData[i]不是NUL字节,则while循环永远不会执行。
  • 但是,如果inputData[i]是NUL字节,则while循环将永久执行。
  • 假设您已经在inputData中读取了正确的字符串,那么在某些时候inputData[i]将是NUL,并且您将拥有无限循环。

要计算标准C字符串的长度,只需执行此操作

count = strlen(inputData);

如果由于某种原因你真的必须写一个循环,那么以下工作:

int len = 0, 
while (inputData[len] != '\0') {
    len++;
}

循环后,len保持字符串的长度。

答案 1 :(得分:1)

#include <iostream>
#include <string>

int main()
{
    std::string input;
    std::getline(std::cin, input);
}

答案 2 :(得分:0)

全局数组不能动态更改大小,除非它们是指向数组的指针,在这种情况下,您可以擦除它们并重新分配它们。

也许你所追求的是一个自动调整大小的数组,就像std :: vector一样。您可以通过调用向量上的size()来查看数组中有多少个字母,并且可以通过调用resize()来增加数组的大小。

虽然不是最优雅的解决方案,但目前可能更容易使用。