Универсальная функция C++ для чтения 2D-вектора из стандартного вводаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Универсальная функция C++ для чтения 2D-вектора из стандартного ввода

Сообщение Anonymous »

Я пытаюсь написать на C++ универсальную функцию, которая принимает входные матрицы из стандартного ввода и преобразует их в вектор. Предполагается, что входной формат представляет собой строку, представляющую 2D-массив, например: [[5, 6], [7, 8]]. Функция должна обрабатывать разные типы (например, int, string, bool) и правильно заполнять вектор.
Вот код, который я написал:

Код: Выделить всё

template
vector read2DVectorFromStdin() {
string input;
getline(cin, input);

// Remove all spaces from the input
input.erase(remove_if(input.begin(), input.end(), ::isspace), input.end());

vector matrix;
stringstream ss(input);
char ch;

// Check if input starts and ends with square brackets
if (input.front() != '[' || input.back() != ']') {
cerr  ch) {
if (ch == '[') {
vector row;
T value;
string token;

while (ss.peek() != ']') {
getline(ss, token, ',');

// Handle the case where the token ends with ']'
size_t pos = token.find(']');
if (pos != string::npos) {
token = token.substr(0, pos);
}

stringstream tokenStream(token);
if constexpr (is_same::value) {
// Remove leading and trailing spaces
token.erase(remove_if(token.begin(), token.end(), ::isspace), token.end());
// Check for and remove quotes
if (token.front() == '"' && token.back() == '"') {
token = token.substr(1, token.length() - 2);
}
row.push_back(token);
}
else if constexpr (is_same::value) {
// Convert to lowercase for easier comparison
transform(token.begin(), token.end(), token.begin(), [](unsigned char c) { return tolower(c); });

// Trim leading and trailing spaces
auto start = token.find_first_not_of(' ');
if (start != string::npos) {
token = token.substr(start);
}

auto end = token.find_last_not_of(' ');
if (end != string::npos) {
token = token.substr(0, end + 1);
}

if (token == "true" || token == "1") {
value = true;
}
else if (token == "false" || token == "0") {
value = false;
}
else {
cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/78730909/c-generic-function-to-read-2d-vector-from-standard-input[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»