Ваш код довольно запутан. Половина вашего кода обрабатывает строку как последовательность символов (что правильно), а другая половина обрабатывает ее как последовательность чисел с плавающей запятой, что на самом деле неверно. Например
std::vector<float> arr(trans_matrix.size(), 0);
это создает вектор того же размера, что и строка. Но размер строки - это количество символов, которое не совпадает с числом чисел в строке. Также
arr[j] = std::stof(trans_matrix[i]);
trans_matrix[i]
- это символ, а не строка, поэтому вы не можете использовать для него функцию, которая преобразует строку в число с плавающей точкой.
Я пытаюсь прояснить, что вы не можете программировать, написав правильный код. Вы должны тщательно подумать о том, что вы делаете, и написать абсолютно правильный код. Вы должны быть абсолютно ясны и точны в отношении понятий.
Как бы вы это сделали, если бы читали с std::cout
? Ну, это точно так же, если вы читаете из строки, за исключением того, что вы используете std::istringstream
вместо std::cout
. Вот один простой способ.
#include <sstream>
std::vector<float> arr;
std::istringstream input(trans_matrix);
float f;
while (input >> f)
arr.pusk_back(f);
Просто, создайте поток строк, считывайте поплавки по одному, добавляйте их в вектор.