3

我被要求在不使用 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);
}
4

2 回答 2

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;
}
于 2013-08-17T08:54:20.480 回答
-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;
}
于 2013-08-17T08:57:37.760 回答