• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator używając tablicy, ze stringiem jako input

0 głosów
42 wizyt
pytanie zadane 10 lutego w C i C++ przez kenguh Nowicjusz (120 p.)
edycja 10 lutego przez kenguh

Siemanko, mam problem. Głowię się z tym już dłuższą chwilkę. Chcę napisać algorytm, który po wprowadzeniu jakiegoś działania matematycznego, składającego się jedynie ze znaków +, /, -, *, i nawiasów (, ), policzy mi wynik tego działania. Oczywiście może to być działanie wieloczłonowe, mam na myśli, że z użyciem kilku liczb, a nie jedynie jednego operatora i dwóch liczb - bo takie coś jest za proste. Na chwilę obecną stoję w miejscu, gdzie po zaczytaniu działania, przepisuje mi je do tablicy. Jedynie problem jest taki, że mój algorytm odpowiadający za łączenie sąsiednich cyfr w liczbę nie chce działać, zasymulujmy co mam na myśli:

tab = { 2, 0, 4, +, 5, 3, *, 2};

powiedzmy, że to jest nasze działanie matematyczne po przerzuceniu do tablicy i teraz chcę sprawić, aby wszystkie sąsiednie cyfry znajdowały się pod jednym indeksem, aby później było łatwiej je parsować do integera i liczyć, czyli:

tab = { 204, +, 53, *, 2};

 

ma ktoś jakiś pomysł? wkleję tu swój algorytm, który niestety działa tylko dla jednego indeksu, nie wiem czy może jest tu problem z pętlą czy z czym innym.

 

for (int j = 0; j < expression.length(); j++) {
	if(exp_tab[j] != "/" || "+" || "-" || "*" || ")" || "(") { 
		if (exp_tab[j + 1] != "/" || "+" || "-" || "*" || ")" || "(") {
			exp_tab[j] += exp_tab[j + 1];
			exp_tab[j + 1] = "";
		}	
	}
}

exp_tab[i] = tablica typu string, w której przechowuje zmienne po przerzuceniu ze stringa,

expression = zmienna typu string, input naszego działania. Użyłem tam expression.length() aby prościej było sprawdzić wielkość tablicy.

 

A tu jest cały kod mojego programu, na końcu jest pętla wypisująca wszystkie dane z tablicy, rozdzielając je spacją by sprawdzić, czy się połączyły.

 

#include "pch.h"
#include <iostream>
#include <string>

int main()
{
	std::string expression = "", exp_var = "", exp_tab[64];

	std::cout << "expression: ";
	std::cin >> expression;

	for (int i = 0; i < expression.length(); i++) {
		exp_tab[i] = expression[i];
	}

	for (int j = 0; j < expression.length(); j++) {
		if(exp_tab[j] != "/" || "+" || "-" || "*" || ")" || "(") { 
			if (exp_tab[j + 1] != "/" || "+" || "-" || "*" || ")" || "(") {
				exp_tab[j] += exp_tab[j + 1];
				exp_tab[j + 1] = "";
			}	
		}
	}

	for (int k = 0; k < expression.length(); k++) {
		std::cout << exp_tab[k] << " ";
	}
}

 

komentarz 10 lutego przez j23 VIP (103,300 p.)
Parę tygodni temu był temat na dotyczący parsowania wyrażeń matematycznych (włącznie z kompletnym kodem). Poszukaj go sobie.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
3 odpowiedzi 133 wizyt
pytanie zadane 21 czerwca 2018 w C i C++ przez XaFF Użytkownik (610 p.)
0 głosów
3 odpowiedzi 139 wizyt
pytanie zadane 22 listopada 2017 w C i C++ przez Aisekai Nałogowiec (35,230 p.)
0 głosów
4 odpowiedzi 205 wizyt
pytanie zadane 4 sierpnia 2018 w C i C++ przez Hinzeq Użytkownik (780 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

64,220 zapytań

110,613 odpowiedzi

231,872 komentarzy

46,964 pasjonatów

Przeglądających: 253
Pasjonatów: 21 Gości: 232

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...