我被要求从输入中获取一个字符串(可以是任意大小)而不使用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);
}
答案 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;
}