Ir ao conteúdo
  • Cadastre-se

C# Como converter string de caracteres em array int


Murilo Murilo

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

3 horas atrás, 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

 

Como você quer aproveitar somente a parte numérica da string,
e lançar cada parte separada por virgula numa posição de um
array de inteiro então vai precisar eliminar os colchetes e 
as virgulas desnecessárias, tem que usar o método Split()
do C# para isto e no final usar o método Parse junto com o 
método Trim() para conversão em array de inteiro.

Foi assim que eu fiz, mas ainda há uma maneira até
mais curta que esta, que seria filtrar sua string e separar
os dígitos eliminando os colchetes e virgulas desnecessárias,
e por fim usar o método Parse junto com o método Trim()
para conversão.
Faça mais algumas tentativas, e bem provável que consiga.

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • mês depois...

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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!