0

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

4

3 回答 3

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保存字符串的长度。

于 2010-04-26T22:36:10.230 回答
1
#include <iostream>
#include <string>

int main()
{
    std::string input;
    std::getline(std::cin, input);
}
于 2010-04-26T22:15:31.683 回答
0

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

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

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

于 2010-04-26T22:05:02.343 回答