private FilaLista <char> CriarInfixa(ref string infixa) { FilaLista <char> seqInfixa = new FilaLista <char>(); char letra = 'A'; //char que irá de A a Z para "substituir" os números valores = new double[26]; //instanciação do vetor de valores string numero = ""; //string que armazenará um valor lido, caracter por caracter for (int i = 0; i < txtVisor.Text.Length && !erro; i++) //percorre string do txtVisor, indexando-o como um vetor, até acabar as posições { char caracterAtual = (txtVisor.Text)[i]; //pega o caracter atual pelo index do for int num; //variável apenas com fim de ser usada no tryParse if (int.TryParse(caracterAtual.ToString(), out num) || caracterAtual.Equals('.') || caracterAtual.Equals(',')) //se o valor for um número inteiro(como se está analisando apenas um caracter isolado, não se precisa usar double.TryParse) { // ou se for um '.', ou seja, uma vírgula do double, ele faz parte de um número if (caracterAtual.Equals('.')) { caracterAtual = ','; } numero += caracterAtual; //concatena caracter do número em formação } else if (numero != "") //se caracter lido não fizer mais parte de um número e a variável numero não for vazia { valores[letra - 'A'] = double.Parse(numero); //armazena-se valor do número formado, convertendo-o para double infixa += letra + "" + caracterAtual; //concatena-se o número e o caracter lido na string infixa seqInfixa.Enfileirar(letra); //enfileira letra referente a posição do número no vetor de valores seqInfixa.Enfileirar(caracterAtual); //enfileira caracter de operação numero = ""; //esvazia string de número para que comece a formação de um novo caso haja letra++; //vai para a próxima letra } else //se o caracter lido for referente a uma operação mas não houver um número na variável numero (está vazia) { if (caracterAtual.Equals('-') || caracterAtual.Equals('+')) //o caracter pode fazer parte do número, como "-1", mas daí o '+'/'-' tem que { //estar logo no começo da sequência, ou estar precedido de '(' if (seqInfixa.EstaVazia() || seqInfixa.OFim().Equals('(')) { numero += caracterAtual; } else { seqInfixa.Enfileirar(caracterAtual); //enfileira-se caracter atual infixa += caracterAtual; //concatena-se caracter atual em infixa } } else { seqInfixa.Enfileirar(caracterAtual); //enfileira-se caracter atual infixa += caracterAtual; //concatena-se caracter atual em infixa } } if (i + 1 == txtVisor.Text.Length && (numero != "") && !erro) // se o próximo index do vetor for o fim da operação mas o número não estiver vazio { valores[letra - 'A'] = double.Parse(numero); //armazena valor no vetor de valores seqInfixa.Enfileirar(letra); //enfileira letra correspondente a valor infixa += letra + ""; //concatena letra à sequencia infixa numero = ""; //esvazia número letra++; //vai à próxima letra } } lblInfixa.Text = infixa; //exibe sequência infixa formada no lblInfixa return(seqInfixa); }