char* a = new char[50];
这是一项学校作业。我不允许使用字符串或向量或其他任何东西。只是char数组。
假设我想cin >> a;
,我不知道输入的大小。我该怎么把它放在char数组中?以上仅适用于小尺寸的输入。
我应该这样做吗? char* a = new char[some_large_number];
还是有更好的方式?
我只能使用(动态)char数组。
编辑:输入可以是任何字符串
abcd
甚至是somelongrandomsentecewithoutspsomelongrandomsentecewithoutspacessomelongrandomsentecewithoutspaces
答案 0 :(得分:9)
这对于字符数组来说有点棘手:您需要做的是告诉cin
您不希望收到超过一定数量的字符(50个字符缓冲区为49,因为您需要空终止符的空格)。读取完成后,检查字符串的长度。如果是49,则分配一个新的更大的字符串,将旧字符串复制到其中,然后继续阅读。如果小于49,则已到达字符串的结尾。
您可以使用istream::get
将数据读入缓冲区:
cin.get(a, 50); // You can specify an optional delimiter as a third parameter
请注意,您传递的长度为50,get
将自动减去1,因为它知道null终止符所需的空间。