tenho o seguinte programa para ler os dados de um arquivo csv para calculos de probabilidade porem nao estou conseguindo converter a string para int ao executar ele da erro de:
terminate called after throwing an instance of 'std::invalid_argument'
what(): stoi
Abortado (imagem do núcleo gravada)
Esses dias fiz o teste e tina funcionado ele estava convertendo o numero do concurso para inteiro nao sei o que aconteceu. Como converter a string para inteiro corretamente?
// Estrutura para leitura dos dados de um arquivo csv
struct ReadData
{
int numbers;
std::vector<int> colunas;
};
// Função para limpar uma string removendo espaços em branco
std::string isSpace(const std::string& str)
{
std::string resultado;
for (char c : str)
{
if (!std::isspace(c))
{
resultado += c;
}
}
return resultado;
}
// Função para ler os dados do arquivo CSV
std::vector<ReadData> getDetails(const std::string& filename)
{
std::vector<ReadData> details;
std::ifstream arquivo(filename);
if (!arquivo.is_open())
{
std::cerr << "Erro ao abrir o arquivo " << filename << std::endl;
return details;
}
std::string linha;
// Descartar a primeira linha (cabeçalho)
std::getline(arquivo, linha);
while (std::getline(arquivo, linha))
{
std::stringstream ss(linha);
std::string celula;
ReadData get;
// Lê o número da celula
std::getline(ss, celula, ',');
get.numbers = std::stoi(isSpace(celula));
// Descartar a 2ª coluna
std::getline(ss, celula, ',');
// Ler os números sorteados
for(int i = 2; i < 7; ++i)
{
std::getline(ss, celula, ',');
// Verifica se a célula contém apenas dígitos
if (celula.find_first_not_of("0123456789") == std::string::npos)
{
// Converte string para int e adiciona ao vetor
get.colunas.push_back(std::stoi(celula));
}
}
details.push_back(get);
}
return details;
}
// Função para exibir os dados
void printDetails(const std::vector<ReadData>& dados)
{
for (const auto& get : dados)
{
std::cout << "Concurso: " << get.numbers << std::endl;
std::cout << "Números: ";
for (int num : get.colunas) std::cout << num << " ";
std::cout << "\n\n";
}
}
int main()
{
std::vector<ReadData> dados = getDetails("./historico_megasena.csv");