Ir ao conteúdo

Posts recomendados

Postado

preciso converter string em array de inteiros , 

qual a melhor forma? 

 

string str = “[[6],[3,5],[9,7,1],[4,6,8,4]]”;

 

preciso fazer a conversao no formato a cima para 

 

int [][] array = new int[3][];

array[0] = new int []{6};

array[1] = new int []{3,5};

array[2] = new int []{9,7,1};

array[3] = new int []{4,6,8,4};

  • Curtir 1
Postado

@Murilo Murilo marcou a linguagem como C# ...

 

Em C++ pode escrever isso. Em, C seria bem similar.

 

Use uma estrutura tipo stack para acompanhar a dimensão. Pode ser apenas um contador. Como a entrada é pequena não é importante ler a entrada duas vezes. Determinado o total de valores crie o vetor inicial e depois os internos

 

int [][] array = new int[3][];
array[0] = new int []{6};
array[1] = new int []{3,5};
array[2] = new int []{9,7,1};
array[3] = new int []{4,6,8,4};

 

Note que isso que escreveu está errado. array seria int*[4]... Errou na conta.

 

 

  • Obrigado 1
Postado

@Murilo Murilo  Não entendo o que dizer.

 

Em 06/11/2022 às 13:30, arfneto disse:
int [][] array = new int[3][];

 

quando você declarou isso já contou você mesmo quantos conjuntos vai ter. E são QUATRO como você mesmo listou a seguir

 

Em 06/11/2022 às 07:34, Murilo Murilo disse:

array[0] = new int []{6};

array[1] = new int []{3,5};

array[2] = new int []{9,7,1};

array[3] = new int []{4,6,8,4};

 

Isso quer dizer que

  • usou um contador
  • errou na conta.

 

E ao declarar os QUATRO outros está contando com o compilador para contar pra você. Esse é o sentido de int[] como você escreveu. E assim esse valor tem que ser revolvido em tempo de compilação porque o compilador precisa dos valores para.... CONTAR quantos são: { 4,6,8,4 } são 4 elementos então array[3] vai ser int[4].

 

Espero que tenha entendido.

 

Sugiro de novo usar uma pilha para colocar os valores.. Claro, uma máquina de estados seria uma maneira simples e nada original de fazer isso.

 

  • Obrigado 1
Postado

@Murilo Murilo 

 

Leu a parte em que eu falei sobre você estar contando os valores e isso ser feito em tempo de compilação? Isso era uma tentativa de mostrar que essa "linha de raciocínio"  não serve.

 

Leu a parte em que eu falei sobre usar uma pilha? Isso é uma "linha de raciocínio".

 

Leu a parte em que eu falei sobre usar uma máquina de estados? É uma linha de raciocínio. Sabe o que uma máquina de estados?

 

Para converter os valores use o simples: Parse ou TryParse. Veja https://learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/types/how-to-convert-a-string-to-a-number por exemplo, em português

 

 

 

  • Curtir 1
Postado
Em 06/11/2022 às 18:52, Murilo Murilo disse:

@Main.cpp pode postar o codigo pra eu ver?

@arfneto a linguagem esta certa estou fazendo em c# , mas não estou conseguindo 

formarar e converter para dar certo no array

 

 

Acho que deve ser isto que esteja querendo fazer,

Bons estudos e boa sorte:

 

        private void Form1_Shown ( object sender, EventArgs e ) {
            
            String str = "[ [ 6 ], [ 3,5 ], [ 9,7,1 ], [ 4,6,8,4 ] ]";
            /*
             Como você pretende converter a string apresentada num array de inteiros,
             de quatro posições então vai precisar eliminar os colchetes e as virgulas,
             para isto vamos começar declarando uma string temporária e um array de string,
             temporário da seguinte forma:
             */

            //Declaramos uma string temporária e por ordem do compilador a inicializamos.
            String str_1 = "";

            //Aqui declaramos um array de string temporário e inicializamos com a string a ser
            //convertida Invocando o método Split() para remoção de todas as virgulas.
            String [ ] Sep_1 = str.Split ( ',' );

            //Um loop é necessário para que possamos percorrer todos os caracteres da string.
            for ( int i = 0; i < Sep_1.Length; i++ ) {
            //str_1 recebe todos os caracteres da string sem as virgulas que foram removidas.
                str_1 += Sep_1 [ i ];
            }

            //Aqui imprimimos opcionalmente a string sem suas virgulas que foram removidas
            //label1.Text += str_1;

            /*
            Na verdade o método Split() removeu todas as virgulas, mas ainda não
            é suficiente, precisamos remover os colchetes de abertura e de fechamento,
            Para isto vamos declarar uma segunda string temporária e um segundo array
            de string que opera também de forma temporária.
            */

            //Declaramos uma segundaa string temporária e Por ordem do compilador a inicializamos.
            String str_2 = "";

            //Aqui declaramos mais um array de string temporário e o inicializamos com a primeira string
            //temporária que criamos Invocando o método Split() para remover todos os colchetes de abertura.

            String [ ] Sep_2 = str_1.Split ( '[' );

            //Um loop é necessário para que possamos percorrer todos os caracteres da string.
            for ( int i = 0; i < Sep_2.Length; i++ ) {
                str_2 += Sep_2 [ i ];
            }

            //Aqui imprimimos opcionalmente a string sem suas virgulas e sem seus
            //colchetes de abertura que foram removidos
            //label1.Text += str_2;

            /*
            Na verdade o método Split() removeu todos as virgulas e todos os colchetes de abertura
            mas ainda não é suficiente, precisamos remover todos os colchetes de fechamento,
            Para isto vamos declarar um terceiro array de string que opera também de forma temporária.
            */

            //Aqui declaramos mais um array de string temporário e o inicializamos com a segunda string
            //temporária que criamos Invocando o método Split() para remover todos os colchetes de fechamento.
            String [ ] Sep_3 = str_2.Split ( ']' );

            //Aqui imprimimos opcionalmente o array de string sep_3 que recebeu da string str_2
            //a remoção dos colchetes de fechamento que faltava ser removido pelo método Split()
            //for ( int i = 0; i < Sep_3 [ i ].Length; i++ )
                //label1.Text += Sep_3 [ i ];

            //Aqui declaramos um array de inteiro que receberá a conversão da string 
            //que teve suas  virgulas e colchetes removidos pelo método Split(),
            //restando apenas só sua parte numérica.
            int [ ] arr = new int [ Sep_3.Length ];

            //Um loop é necessário para que possamos percorrer todos os caracteres da string.
            for ( int i = 0; i < Sep_3 [ i ].Length; i++ ) {
                //Para a conversão poderiamos usar o método parse ou TryParse,
                //mas o método Convert faz isto de uma maneira mais curta.
                arr [ i ] = Convert.ToInt32 ( Sep_3 [ i ].ToString ( ) );
            }

            //Um loop é necessário para que possamos percorrer todas as posições de nosso
            //array de inteiros e imprimilo corretamente (usei um label num form, mas teste
            //com Console.Write num projeto de console sem problemas )
            for ( int i = 0; i < Sep_3 [ i ].Length; i++ ) {
                label1.Text += arr [ i ].ToString ( ) + "   ";
            }

            label1.Text += "\n\n";
            //Imprimindo abaixo cada posição separadamente
            label1.Text += arr [ 0 ] + " - ";
            label1.Text += arr [ 1 ] + " - ";
            label1.Text += arr [ 2 ] + " - ";
            label1.Text += arr [ 3 ];
        }

  • Curtir 1
  • mês depois...
Postado

Seu exemplo ficou um pouco confuso, mas para converter de string para int em C# vou dar 2 exemplos: um exemplo sem array e outro com:

 

//Convertendo um valor string para int
string str = "20";
int numero = Int32.Parse(str);
Console.WriteLine(numero);

//Convertendo um array de strings para um array de int
string[] strArray = { "2", "3", "4", "5" };
int[] intArray = Array.ConvertAll(strArray, s => int.Parse(s));         
foreach (int item in intArray)
{
  Console.Write(item);
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...