c ++ хранит значение cin в массиве любого типа - PullRequest
1 голос
/ 12 февраля 2020

Привет, это мой первый пост; но не первый раз на этом сайте; Я пытался найти ответ на свою проблему, но пока не могу его найти.

На данный момент у меня есть шаблон класса для массива

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

Но это связано с целым рядом ошибок.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

std::getline() считывает std::string, вы не можете прочитать его непосредственно в массив T[], как пытаетесь это сделать.

Однако, поскольку вы уже знаете максимальное число ожидаемые элементы (из вашего size аргумента шаблона), вы можете просто вызвать operator>> в al oop, чтобы проанализировать элементы форматированного массива из std::istringstream, который вы заполняете из данных std::cin, например:

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

Демонстрационная версия

0 голосов
/ 12 февраля 2020

Используйте l oop для ввода или, если вы хотите получить ввод один раз, то разделите это целое число с помощью оператора деления и модуля. Сохраните каждое новое целое число в индексе массива и увеличьте индекс.

...