Pobieranie zmiennych z tekstu, wyszukiwanie danych.

0

Witam serdecznie,

Mam problem z obsluga tekstu w programie. Chce zrobic tak, aby wpisujac w programie np. taka formule:

¬ALFA(x)||¬BETA(y)||GAMMA(x,y,z)||¬OMEGA(z))

Program odpowiednio podzielil mi ten tekst na poszczegolne slowa pomijajac znak alternatywy || i wpisal je do tablicy jako osobne zmienne.

Tak abym nastepnie mogl takie tablice porownywac.

Myslalem aby zrobic to tak:
Kopiuje znak po znaku az do napotkania | pomijam drugi | i ewentualna spacje i tworze nastepna zmienna a potem wpisuje to do tablicy. Ale zanim zabiore sie za to, chcialbym zapytac czy moze jest jakis latwiejszy lub bardziej poprawny sposob?

1
#include <boost/algorithm/string.hpp>
using namespace boost;

...

string s = "¬ALFA(x) || ¬BETA(y) || GAMMA(x, y, z) || ¬OMEGA(z))";
vector<string> slowa;

split(slowa, s, is_any_of("|"), token_compress_on);
0

Witam ponownie,

Mam teraz taki prostu programik i chce w nim wyszukac zmienna pytanie.
Program kompiluje sie i uruchamia ale po chwili wywala blad.
Co moze byc przyczyna?

 #include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

vector<string> kb;

string pytanie("Rakieta(M1)");
 size_t pos;



int main()
{
              string form1 =("^Amerykanin(West)||^Bron(M1)||^Sprzedaje(West,M1,Nano)||^Wrogi(Nano)||Przestepca(West)");
               string form2 = ("^Rakieta(M1)||^Posiada(Nano,M1)||Sprzedaje(West,M1,Nano)");
               string form3 = ("^Rakieta(M1)||Bron(M1)");
               string form4 = ("^Wrog(M1,Ameryka)||Wrogi(M1)");
               string form5 = ("Amerykanin(West)");
               string form6= ("Wrog(Nano,Ameryka)");
               string form7= ("Posiada(Nano,M1)");
               string form8= ("Rakieta(M1)");
               
               kb.push_back(form1);
               kb.push_back(form2);
               kb.push_back(form3);
               kb.push_back(form4);
               kb.push_back(form5);
               kb.push_back(form6);
               kb.push_back(form7);
               kb.push_back(form8);
               
               
    for(int i=0; i<kb[i].size();i++)
    {    
    pos = kb[i].find(pytanie);
	if (pos ==string::npos)
	
    {
		std::cout << "nie znaleziono\n";
    }
	else
	{
		std::cout << "znaleziono na pozycji " << pos << "\n";
    }
};

	
    system("PAUSE");
    return EXIT_SUCCESS;
}
0

for(int i=0; i<kb[i].size();i++) W tym miejscu sprawdzasz rozmiar stringa z poprzedniej iteracji a nie vectora, zmienna i wychodzi poza ten drugi i stąd błąd. Daj tam for(int i=0; i<kb.size();i++) i będzie dobrze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1