嗨,这是我的第一篇文章; 但不是我第一次在这个网站上;我试图找到我问题的答案,但到目前为止我还没有完全找到它。
我目前有一个数组的模板类
template<typename T, int size>
class Array{
//Leaving out all my other stuff because I don't thinks its relevant.
private:
T array[size];
}
现在我需要做的是从 cin 读取一行到数组中,例如
>>enter values: 1 2 3 4 5 6 7 8 9
并将它们作为 [1][2][3][4]...等 或
>>Enter values: Hello world!
并将它们存储在数组中作为 [Hello][World!
大多数问这个问题的人都是单独输入的,比如
>>Enter values: 1
2
3
4
5
etc.
但这不是我需要的,我不确定如何拆分它。 我的尝试:
template <typename T, int size>
void Array<T, size>::inputArray() {
T data;
getline(cin,data);
istringstream elements (data);
dynamicArray = elements;
}
但这会带来一大堆错误。
std::getline()
读取std::string
,你不能让它像你试图做的那样直接读入T[]
数组。
但是,由于您已经知道预期的最大元素数(来自size
模板参数(,因此您只需在循环中调用operator>>
即可从从std::cin
数据填充的std::istringstream
中解析格式化的数组元素,例如:
template <typename T, int size>
void Array<T, size>::inputArray() {
string line;
getline(cin, line);
istringstream iss(line);
for (int i = 0; i < size; ++i) {
if (!(iss >> array[i])) {
// eof or error, handle as needed...
break;
}
}
}
现场演示
使用循环进行输入,或者如果您想输入一次,则使用除法和模运算符拆分该整数。将每个新整数存储在数组索引中并递增索引。