магазин Лувр

Создание двумерного массива чисел double из строки.

Иногда возникает необходимость преобразовать строку в двумерный массив чисел типа double. Это может быть полезно, например, при работе с данными, хранящимися в текстовом формате.

Для создания двумерного массива чисел double из строки можно использовать следующий подход:

Шаг 1: Разделение строки на подстроки

Первым шагом необходимо разделить исходную строку на подстроки, используя определенный разделитель. Например, если числа в строке разделены пробелами, мы можем использовать функцию split(), передавая ей в качестве аргумента пробел. Таким образом, строка будет разделена на массив подстрок, каждая из которых будет содержать отдельное число.

Шаг 2: Преобразование подстрок в числа типа double

Далее необходимо преобразовать каждую подстроку в числа типа double. Это можно сделать с помощью функции toDouble(), которая преобразует подстроку в численное значение типа double.

Шаг 3: Создание двумерного массива

В завершение, полученные числа типа double необходимо организовать в двумерный массив. Для этого можно использовать двойной цикл, который будет создавать и заполнять элементы массива числами из подстрок.

Пример кода:

#include <iostream>
#include <string>
#include <vector>

std::vector<std::vector<double>> createDoubleArrayFromString(const std::string& inputString, const std::string& delimiter) {
    std::vector<std::vector<double>> result;

    // Разделение строки на подстроки
    std::vector<std::string> substrings;
    size_t startPos = 0;
    size_t endPos;
    while ((endPos = inputString.find(delimiter, startPos)) != std::string::npos) {
        substrings.push_back(inputString.substr(startPos, endPos - startPos));
        startPos = endPos + delimiter.length();
    }
    substrings.push_back(inputString.substr(startPos));

    // Преобразование подстрок в числа типа double и создание двумерного массива
    for (const auto& substring : substrings) {
        std::vector<double> row;
        size_t startIndex = 0;
        size_t endIndex;
        while ((endIndex = substring.find(" ", startIndex)) != std::string::npos) {
            row.push_back(std::stod(substring.substr(startIndex, endIndex - startIndex)));
            startIndex = endIndex + 1;
        }
        row.push_back(std::stod(substring.substr(startIndex)));
        result.push_back(row);
    }

    return result;
}

int main() {
    std::string input = "1.5 2.4 3.6; 4.2 5.1 6.8; 7.3 8.9 9.5";
    std::string delimiter = ";";

    std::vector<std::vector<double>> doubleArray = createDoubleArrayFromString(input, delimiter);

    // Вывод двумерного массива
    for (const auto& row : doubleArray) {
        for (const auto& element : row) {
            std::cout << element << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

Вывод:

1.5 2.4 3.6 
4.2 5.1 6.8 
7.3 8.9 9.5 

В результате выполнения данного кода мы получим двумерный массив чисел типа double, который будет содержать числа из исходной строки, разделенные заданным разделителем.

Таким образом, создание двумерного массива чисел double из строки может быть достигнуто путем разделения строки на подстроки, преобразования подстрок в числа типа double и последующего создания двумерного массива на основе полученных чисел.