Преобразовать строку в массив матрицы - PullRequest
0 голосов
/ 26 апреля 2019

Требуется разработать программу для выполнения операций Matrix. Программа использования определенный формат строки для представления матрицы в пользовательском вводе и выводе разделы. Для следующей матрицы: пример: пользователь вводит строковое представление матрицы: например: [10 2,13 3; -5 0 4; 16,5 1 8] В программе пользователь вводит матрицу в определенном формате строки, а затем попросил ввести оператора

, поэтому я не могу преобразовать эту строку в массив для выполнения операций в виде суммы или умножения

using namespace std;

int main() { 

    int i, j, n; 
    string s1; 
    float m1[100][100]; 

    getline(cin, s1);

    for (int i = 0; i < 100; i++) { 
        for (n = 0; n < s1.length(); n++) { 
            if (isspace(s1.at(i)));
        } 
    }
}

1 Ответ

1 голос
/ 26 апреля 2019

Один алгоритм для разбора / чтения матриц, например

[10 2.13 3;-5 0 4;16.5 1 8]

может быть:

  1. Индексы col и row инициализируются с 0.

  2. Цикл, пропускающий символы входной строки, пока не будет найден '['.

  3. Цикл, который читает символ входной строки для символа со следующей обработкой

    • '0', '1', ..., '9', '+', '-', '.', 'e', 'E': собрать символ (это часть числа.)
    • ' ': Если есть собранные символы, преобразуйте их в float (например, используя strtod()), сохраните результат в матричном элементе (row, col) и затем увеличьте col .
    • ';': если есть собранные символы, преобразуйте их в float (например, используя strtod()), сохраните результат в матричном элементе (row, col).
      Увеличьте row и сбросьте col на 0.
    • ']': если есть собранные символы, преобразуйте их в float (например, используя strtod()), сохраните результат в матричном элементе (row, col).
      Чтение этой матрицы завершено.

    • Все остальное - синтаксическая ошибка.

Примечания:

  • strtod() имеет второй аргумент, который возвращает указатель на первый непринятый символ. Это должно быть проверено, указывает ли он на конец собранных символов. (В противном случае алгоритм может принять, например, "1.23+1" как 1.23, не замечая синтаксическую ошибку в +.

  • Приведенный выше алгоритм может / должен также возвращать количество собранных строк и столбцов.

  • Всякий раз, когда начинается новая строка, столбцы должны / могли быть проверены до того, была ли заполнена предыдущая строка. (Это исключает первую строку, которая фактически определяет количество столбцов.)

  • Максимально возможное количество строк и столбцов должно рассматриваться как двойное. Используется массив C.

...