Эти две строки проблематичны.Вы излишне объявили их как массивы с одним элементом каждый и инициализировали каждую строку как пустую.
string digito[] = { "" };
string signo[]={""};
Однако после этого вы индексируете их с ненулевыми индексами:
digito[i] = entrada[i];
Эта строка проблематична по двум причинам;выход за границы массива и несовместимые типы.
digito[i]
- это тип std::string
(поскольку digito
равен std::string[]
), а entrada[i]
равен char
(при условии entrada
std::string
).std::string
имеет перегрузку operator=
, которая позволяет назначать один символ, но я полагаю, это не то, что вам нужно.
Что касается второй проблемы, std::string
требует, чтобы вы ее увеличилиперед случайным доступом к нему по заданному индексу.В этом случае лучший способ сделать это во время построения, отбросив ошибочное использование массива:
std::cin >> entrada;
std::string digito(entrada.size(), ' ');
std::string signo(entrada.size(), ' ');
При этом я не уверен, что этот код выполняет то, что вы хотите,Имея входную строку:
2+2/3
Вы получите две такие строки:
digito = "2 2 3"
signo = " + / "
Если ваша фактическая цель состояла в том, чтобы разбить входные данные (разделите начисла и операторы), гораздо лучшим способом было бы использовать либо два std::vector<char>
с, либо, еще лучше:
using Number = int;
enum class Operator { Plus, Minus, Div, Mul };
using Token = std::variant<Number, Operator>
using Sequence = std::vector<Token>;
Согласованная модель данных со строгим типом данных значительно упростит запись правильныхкод, который его производит и впоследствии работает с результатами.