String [Conversao]

8 respostas
R
eu gostaria de converter uma expressao matematica do tipo = (12 + 1)

eu crio a string com essa expressao, mas quero mandar ela neste formato para um array de chartipo char[0] = ( ;

char[1]= 12 ;

char[2]= + ;

char[3]= 1;

char[4]= );

teria algum jeito?

grato.

8 Respostas

ViniGodoy

Isso aí é uma necessidade que surgiu na aula de linguagens formais ou compiladores?
Se for… melhor estudar o material que seu professor sugeriu, em especial na parte de análise léxica e sintática.

Se não for, dê uma olhada em APIs prontas para isso, como o AntLR, ou alguma que avalie a expressão diretamente.

R

vinni godoy…

é porque eu preciso criar um programa em java que faça conversao de uma expressao pos-fixada para infixada e vice-versa.
o problema que e aula de estrtura de dados entao preciso usar uma TAD pilha para fazer a conversao.
essa TAD pilha foi implementada por mim.
mas nao to conseguindo passar a expresao de maneira que teria como eu manipular ela na pilha. entendeu?

ViniGodoy

Basta acumular o número, até que você encontre um símbolo.

Veja se o algoritmo abaixo ajuda:

String numero = "" para cada caracter na string inicio Se for um número Numero = numero + simbolo; Senão Se for um símbolo matemático inicio Processe o simbolo com a pilha Armazene de alguma forma o numero Numero = "" fim fim

R
public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));  
		String exp2;
		System.out.println("Informe a expressao:");
		String entrada = in.readLine();
		
		exp2 = removeSpaces(entrada);
		
		System.out.println(exp2);

	}

	public static String removeSpaces(String s) {  
		  StringTokenizer st = new StringTokenizer(s," ",false);  
		  String t="";  
		  while (st.hasMoreElements()) t += st.nextElement();  
		  return t;  
	}

retiro os espaços. depois teria como eu percorrer a string?
o problema e que pra expressao infixada funciona aquilo que vc disse, mas se ele informar uma do tipo pos-fixada ja nao funcionaria. esse e o grande problema.

ViniGodoy

Oi.

Primeiro de tudo. Se você ler o javadoc da StringTokenizer, vai ver que a própria classe diz que não deve ser mais usada, e que você deve usar split no lugar.

Mas vai aí um código que faz o que você precisa:
import java.util.ArrayList;
import java.util.List;

public class Teste {
    public static String[] parseExpression(String expression) {
        List<String> parsed = new ArrayList<String>();
        
        StringBuilder number = new StringBuilder("");
        for (char ch : expression.toCharArray()) {
            //Se for um número, acumula os caracteres numa String.
            if (Character.isDigit(ch) || ch == '.') {
                number.append(ch);
                continue;
            }

            //Se não for um número, então adiciona o número acumulado na String
            if (number.length() > 0) {
                parsed.add(number.toString());
                number = new StringBuilder("");
            }

            //Se for um espaço ou tab, não considera como operação matemática
            if (ch == ' ' || ch == '\t') {
                continue;
            }

            //Outros símbolos, considere como operação matemática.
            parsed.add(Character.toString(ch));
        }

        //Como acima os números só foram adicionados quando símbolos foram encontrados
        //Precisamos testar se não sobrou um último número sem um simbolo após ele.
        if (number.length() >= 0) {
            parsed.add(number.toString());
        }

        //Retorna os valores acumulados, na forma de um array de Strings.
        return parsed.toArray(new String[parsed.size()]);
    }

    public static void main(String[] args) {
        System.out.println("Infixa");
        for (String str : parseExpression("(12 + 4) * 15.45")) {
            System.out.println(str);
        }

        System.out.println("Posfixa");
        for (String str : parseExpression("12 4 5.34 + -")) {
            System.out.println(str);
        }

    }
}
R

muito obrigado …
desculpa por ser tao iniciante…
e quanto a API nao domino muito o ingles nao…

grato!

ViniGodoy

rsom91:
muito obrigado …
desculpa por ser tao iniciante…
e quanto a API nao domino muito o ingles nao…

Não precisa pedir desculpa. Só não peça para eu entregar também o conversor. Esse trabalho é seu (eu já fiz um desse em 1997, pra escola).
E, quando terminar e tiver funcionando, volta aqui no tópico e posta a solução. :slight_smile:

R

nem pensar o conversor ja tenho o algoritmo desenhado…agora so programar, o que estou fazendo agora.
depois posto sim…mas o codigo? ou o .jar?

Criado 23 de setembro de 2010
Ultima resposta 23 de set. de 2010
Respostas 8
Participantes 2