Pereiti prie turinio

C++ teksto atrinkimo algoritmas


Rekomenduojami pranešimai

Sveiki, taigi kažkaip užkliuvau su paprastučiu algoritmu ir niekaip neišeina jo teisingai padaryti, pervargau gal :D

Ko man reikia, tai algoritmo parašyto C++ kalba, kuris iš klasės atrinktų string tipo elementus, tikrina ar jie nesikartoja ir nesikartojančius deda į masyvą. Tada reiktų to masyvo atspausdinimo, kad neliktų jokių tarpų.

 

Tarkime, turime klasės masyve tokius string tipo elementus:

A
D
A
A
B
C
B
A

Man reikia, kad jis atrinktų juos ir spausdintų:

A
D
B
C

Tikiuosi aišku, būčiau labai dėkingas už pagalbą :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

bool arYraMasyve(string masvyas[], string kuriPatikrinti) {
     for(int i=0;i<(sizeof(masyvas)/sizeof(masyvas[0]));i++) {
             if(masyvas[i].compare(kuriPatikrinti) == 0) {
                     return true;
             }
      return false;
}

int main() {
    if !(arYraMasyve(string_kuri_patikrinti_ar_yra) {
         idetiMasyvan(string_kuri_patikrinti_ar_yra);
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Hmm, kažkodėl ne visai man čia gaunasi. Rašau:

bool arYraMasyve(Birža B[], string APav[], int indeksas) {
     for(int i=0; i<indeksas; i++) {
             if(B[i].ImtiPav().compare(APav[i]) == 0) {
                     return true;
             }
      return false;
  }
}

Birža B[] yra klasė iš kurios turiu atrinkti elementus. B.ImtiPav() tai metodas, kuris grąžina pavadinimą iš klasės. String APav[] yra masyvas į kurį noriu sudėti atrinktus elementus. Tai greičiausiai blogai rašau šią funkciją, nes niekada nesu naudojas nieko panašiai, net neįsivaizduoju kaip turėtų užsirašyti. (Ką tik pradėjau C++)

 

B[] randasi stringai A, A, B, C, D, A. APav[] turi būti atrinkti į A, B, C, D.

 

Main'e rašau:

for (int i=0; i<indeksas; i++)
   if (arYraMasyve(B, APav, indeksas)) 
         B[i].ImtiPav() = APav[i];

   for (int i=0; i<indeksas; i++)
	cout << APav[i] << endl;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

          B[i].ImtiPav() = APav[i];

 

Tau metodas grąžina reikšmę o ne priskire ją. Arba kreipkis tiesiai į parametrą ir priskirk ar pasidaryk dar vieną metodą kuris pirskirtų.

Ups, sumaišiau vietom truputį, turėjo būti

 APav[i] = B[i].ImtiPav();

Hmm, į ekraną vis tiek išveda tik 8 tuščias vietas (indeksas = 8), tai matyt priskyrimas vis tiek blogas, kaip reiktų užrašyti? Reikės gal ryte grįžti, nelabai jau galvojasi man :D

Jeigu kas netingi, tai gal iš vis galėtų užrašyt pilną programą pagal idėją išdėstytą žėmiau? Duočiau riebų pliusą.

Esmė:

Turime klasėje išsaugotus string elementus, tarkime raides: A, A, B, C, C, B, D, kurios yra masyve. Tada norime išrinkti šias raides į kitą string masyvą, kad jis būtų: A, B, C, D ir kad galiausiai main funkcijoje spausdintų šias raides be jokių tarpų.

Redagavo AurimasK
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Hmm, kažkodėl ne visai man čia gaunasi. Rašau:

bool arYraMasyve(Birža B[], string APav[], int indeksas) {
     for(int i=0; i<indeksas; i++) {
             if(B[i].ImtiPav().compare(APav[i]) == 0) {
                     return true;
             }
      return false;
  }
}

Birža B[] yra klasė iš kurios turiu atrinkti elementus. B.ImtiPav() tai metodas, kuris grąžina pavadinimą iš klasės. String APav[] yra masyvas į kurį noriu sudėti atrinktus elementus. Tai greičiausiai blogai rašau šią funkciją, nes niekada nesu naudojas nieko panašiai, net neįsivaizduoju kaip turėtų užsirašyti. (Ką tik pradėjau C++)

 

B[] randasi stringai A, A, B, C, D, A. APav[] turi būti atrinkti į A, B, C, D.

 

Main'e rašau:

for (int i=0; i<indeksas; i++)
   if (arYraMasyve(B, APav, indeksas)) 
         B[i].ImtiPav() = APav[i];

   for (int i=0; i<indeksas; i++)
	cout << APav[i] << endl;

Na, čia akivaizdžiai nesupranti, kam skirtos funkcijos. Nereikia nieko perrašinėti, vardai gali būti bet kokie – funkciją gali iškviesti su bet kokiais to tipo objektais, daug kartų su skirtingais netgi.

 

arYraMasyve(B[i].ImtiPav(), APav)

Ir viskas... Aišku, to perrašymo, kad ciklas eitų iki indekso gali ir prireikti – nežinau, kaip tiksliai, ar bus žinomas masyvo dydis? Juk argumente neaprašomas, o masyvai lyg argumentais perduodami kaip paprasti pointeriai... Bet kokiu atveju, su indeksu patikimiau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, čia akivaizdžiai nesupranti, kam skirtos funkcijos. Nereikia nieko perrašinėti, vardai gali būti bet kokie – funkciją gali iškviesti su bet kokiais to tipo objektais, daug kartų su skirtingais netgi.

 

arYraMasyve(B[i].ImtiPav(), APav)

Ir viskas... Aišku, to perrašymo, kad ciklas eitų iki indekso gali ir prireikti – nežinau, kaip tiksliai, ar bus žinomas masyvo dydis? Juk argumente neaprašomas, o masyvai lyg argumentais perduodami kaip paprasti pointeriai... Bet kokiu atveju, su indeksu patikimiau.

Na aišku, dėkui tada :) Masyvo dydis nėra žinomas, bet aš su while ciklu bei indeksu jį sužinau paprastai skaitymo metu. Dėkui visiems.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...