Funkcja STRTOK, usuwanie duplikatów zmiennych.

0

Witam.

Mam problem w napisaniu programu. Przy wykorzystaniu funkcji STRTOK chcę:

  1. Z pliku wczytuję sobie tego typu wyrażenia:

pq#s
pqr#q
p#r
pwo#wz

I chcę by funkcja brała pierwsze dwa wyrażenia i rozróżniła stronę lewą i prawą np.:

- oddziela strony

pq#s --> lewa:pq prawa:s
pqr#q -->lewa:pqr prawa:q

  1. Bierze lewą stronę z pierwszego równania czyli pq i sprawdza czy, któraś z liter pojawi się po prawej stronie z drugiego równania i jeżeli taka litera istnieje to je kasuje i zapisuje:
    (i odwrotnie też bierze prawą stronę pierwszego równania i sprawdza w kolejnym czy po lewej stronie istnieje ta sama litera jak tak to je kasuje)

p#s
pqr#

I robi tak długo gdy jedno z wyrażeń będzie samym # i wtedy zwraca true w w przeciwnym razie zwraca false.

Da się to w ogóle jakoś zrobić. Jestem początkujący dlatego proszę o wyrozumiałość. Nie umiem sobie poradzić z tym problemem dlatego będę wam bardzo wdzięczny za okazaną pomoc.

Funkcja:

#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}
0

No dobra, a jakiś własny kod? Co do tej pory naklepałeś oprócz wklejenia nam przykładu (swoją drogą na jego podstawie powinieneś to napisać) z cplusplus.com?

0

Na razie napisałem pierwszą część tego programu która wczytuje te formuły i pozbywa się duplikatów a wynik zapisuje mi do pliku.
Teraz nie wiem jak zastosować tą funkcję by działało, żeby porównywały ze sobą stronę prawą i lewą i usuwały powtarzające się litery (w sposób jak napisałem wyżej) i by zapisywało to co zostało i żeby tak długo działało, żeby już nic nie dało się z kreślić lub do czasu aż zostanie samo #. Uczę się dopiero. Nie umiem tego zrobić wychodzą mi głupoty dlatego bardzo proszę o pomoc.

#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main()
{
     string nazwaPliku;
     cout << "Podaj nazwe pliku do otwarcia: ";
     cin >> nazwaPliku;
     ifstream plikwe(nazwaPliku.c_str());
     if(!plikwe)
     {
          cerr << "Blad otwarcia pliku\n";
          return -1;
     }
 
     string tmp;
     vector<string> tekst;
     while(plikwe >> tmp)
     {
          tekst.push_back(tmp);
     }
 
     cout << "Przed usunieciem duplikatow\n";
     for(int i = 0; i < tekst.size(); ++i)
     {
          cout << tekst[i] << "\n";
     }
     sort(tekst.begin(),tekst.end());
     tekst.erase(unique(tekst.begin(),tekst.end()),tekst.end());
 
     cout << "Po usunieciu duplikatow\n";
     for(int i = 0; i < tekst.size(); ++i)
     {
          cout << tekst[i] << "\n";
     }
 
     cout << "Podaj nazwe pliku do ktorego zapisac\n";
     cin >> nazwaPliku;
     ofstream plikwy(nazwaPliku.c_str());
 
     for(int i = 0; i < tekst.size(); ++i)
     {
          plikwy << tekst[i] << "\n";
     }
 
 
}

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