c++ - 动态创建的数组

标签 c++ arrays dynamic pointers allocation

我的任务由两部分组成。首先,我必须创建包含 100 个元素的全局字符数组,并使用 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 数组的大小应该增加两倍。老实说,这对我来说有点过分了。我如何专门创建指向单词的指针?以及如何在不丢失其内容的情况下增加全局数组的大小?用一些临时数组?

最佳答案

无论您的问题的其余部分如何,您似乎对 while 循环有一些错误的想法。让我们看看这段代码。

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

首先,"\0" 不是 NUL 字符。它是指向仅包含终止 NUL 字节的字符串的指针。您需要 '\0' 代替。假设这样改,还是有问题。让我们来看看会发生什么:

  • while 循环是如何工作的?只要条件为真,它就会重复执行主体。
  • while 循环什么时候结束?当通过执行主体最终使条件为假时。
  • 你的循环条件是什么? inputData[i] == '\0',校正后。
  • body 是什么? ++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 保存字符串的长度。

关于c++ - 动态创建的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717199/

相关文章:

c# - 将 SYSTEMTIME( native C++)转换为日期时间 (C#)

c++ - OpenGL 纹理未按定义出现

c++ - std::variant,包装类,和 'conversion from ... to non-scalar type ... requested'

c++ - 取消引用一个指向数组类型的结束指针

C++如何使用数组的元素调用类

html - 根据内容展开DIV

java - 了解 JNI 参数的安全访问

python - 如何制作前一个值不满足条件的索引数组?

css - GWT - 更改 CSS 悬停属性

css - 动态生成 Html 图形