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

时间:2013-08-17 08:38:03

标签: 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);
}

2 个答案:

答案 0 :(得分: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;
}

认为会这样做。


简短版

#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;
}

答案 1 :(得分:-1)

这是一种方法:

#include <iostream>
#include <cstring>

using namespace std;

char *s;
int buflen = 10;
int len = 0;

int main() {
  s = new char[buflen];
  char c;
  while (cin >> c) {
    s[len++] = c;
    if (len >= buflen) {
      // need to allocate more space
      char *temp = new char[buflen * 2];
      memcpy(temp, s, buflen);
      delete s;
      s = temp;
      buflen *= 2;
    }
  }
  s[len++] = '\0';

  cout << "Your string is: " << s << endl;
}