• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

_deXter

[Resolvido] Erro -> inteiro para string

8 mensagens neste tópico

Boas,

Preciso de ajuda neste código. Já andei às voltas com ele mas não estou a conseguir resolver o problema. Este programa supostamente, deve receber um inteiro e devolver esse mesmo inteiro mas no formato string.

No entanto, está a dar-me erro no comando insert da string. O erro é este:

terminate called after throwing an instance of 'std::out_of_range'

  what():  basic_string::insert

Aborted (core dumped)

#include <iostream> 
using std::cout;
using std::cin;
using std::endl;

#include <string>
using std::string;

int main()

{

    int inteiro, num, tamanho = 1;
    string saida;
    
    cout << "INTEIRO ? ";
    cin >> inteiro;
    
    // determinar o tamanho o inteiro
    num = inteiro;
    while (num > 1)
    {        
        num = num / 10;
        tamanho++;
    }
    
    // buscar cada elemento e colocar na string "saida"
    int x = 1, acum = 10, temp;
    char z = '0';
    while (inteiro > 0)
    { 
        temp = '0' + (inteiro % acum);

inteiro = inteiro / 10;
        saida.insert(tamanho - x, 1, temp);
        x++;
    }
    cout << saida << endl;
    return 0;
} 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não era mais facil converter o inteiro para char* usando itoa e depois passar o char* para string usando o contrutor das strings?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não era mais facil converter o inteiro para char* usando itoa e depois passar o char* para string usando o contrutor das strings?

Eu não estou à procura da solução mais fácil. ;)

Para já quero apenas perceber o porquê do erro que me dá. Porque realmente não estou a perceber. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu programa funciona bem para inteiros com um unico digito.

Para inteiros maiores não esta a inserir na posição 0 da string com tamanho um.

Deves fazer um resize da string para o tamanho do inteiro. E depois fazer um trim para limpares os espaços....

Ou então inicias os X com o tamanho e vais decrementado o X. No final fazes o swap da string para teres o inteiro que inseriste...

:wallbash:  ... Para k reinventar a roda  ...  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, já consegui perceber. É que só podemos fazer insert numa string quando o posição de indice inferior também estiver preenchida.

E portanto neste caso, tenho que chegar ao fim, e fazer reverse da string.

Edit: Já estava a mandar isto... Pois é isso, A questão não é reinventar a roda. É só que se estou a começar a aprender c++, preciso de perceber as coisas e não só procurar uma forma para que funcionem,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um reparo... aqui:

    while (num > 1)
    {        
        num = num / 10;
        tamanho++;
    }

vais ter resultados diferentes por exemplo para 10000 (vai dar 4) e 20000 (vai dar 5). Revê a condição do while.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um reparo... aqui:

    while (num > 1)
    {        
        num = num / 10;
        tamanho++;
    }

vais ter resultados diferentes por exemplo para 10000 (vai dar 4) e 20000 (vai dar 5). Revê a condição do while.

Tens razão, obrigado pelo alerta. :P

Obrigado ao skm pela ajuda. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora