不使用C++字符串输入字符串

Sum*_*era 3 c++ dynamic-memory-allocation

我被要求在不使用C++的情况下从输入中获取一个字符串(可以是任何大小)string.我想过为char数组动态分配空间,并从SO本身获得以下实现.但我不确定这是否是一个很好的实施.是否有更好的实现,不需要您输入名称中的元素数量?

#include<iostream>
int main()
{
    int size = 0;
    std::cout << "Enter the size of the dynamic array in bytes : ";
    std::cin >> size;
    char *ptr = new char[size];

    for(int i = 0; i < size;i++)
        std::cin >> *(ptr+i);
}
Run Code Online (Sandbox Code Playgroud)

Who*_*aig 7

可能会弯曲规则(或者我不理解这个问题,但是......).无论如何,当有人用C++说"动态数组"时,我自然会想到一个向量.

#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

int main()
{
    vector<char> vec;
    copy(istreambuf_iterator<char>(cin),
         istreambuf_iterator<char>(),
         back_inserter(vec));
    vec.push_back(0);
    cout << vec.data() << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

认为会做到这一点.


简短的版本

#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

int main()
{
    vector<char> vec {istreambuf_iterator<char>(cin),
                      istreambuf_iterator<char>()} ;
    vec.push_back(0);
    cout << vec.data() << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)