Pereiti prie turinio

Teskto redagavimas C++


Rekomenduojami pranešimai

Sveiki, turiu problemele del teksto redagavimo C++'se. Turiu du duomenu failus ir man reikia rasti ne daugiau 10 pasikartojanciu ILGIAUSIU zodziu. Kaip tai padaryti? Ka pats pdaraiau tai susirikiavau taip, kad kiekvienas zodis yra surikioyas stulpeliu(manau kad taip paprasciau tikrinti, nei visa eilute).

int zpr = 0, zpb = 0, i = 0;
while ((zpr = eil.find_first_not_of(skyrikliai, zpb)) != string::npos){
	zpb = eil.find_first_of(skyrikliai, zpr);
	zodziai[i] = eil.substr(zpr, zpb - zpr);
	i++;
}
n = i - 1;

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš taip daryčiau (reikės atskiro masyvo 10 ilgio):

  • Sekantis žingsnis būtų surikiuoti žodžius pagal ilgį mažėjimo tvarka.
  • Tada paleisti ciklą cikle, kuris tikrintu pirmą žodį su antru ir t. t., kol kitų žodžių ilgis atitiktų pirmo žodžio ilgį arba kol ras bent vieną pasikartojantį. Prieš tai reiktų apsaugos, kuri patikrintų ar tikrinamo žodžio nėra anksčiau minėtam masyve (masyve saugojam 10 ilgiausių pasikartojančių bent vieną kartą žodžių).
  • Patikrinti ar rado pasikartojančių.
  • Jei rado, dėti pasikartojantį žodį į atskirą masyvą (10 ilgio).

Redagavo TheLightning
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš taip daryčiau (reikės atskiro masyvo 10 ilgio):

  • Sekantis žingsnis būtų surikiuoti žodžius pagal ilgį mažėjimo tvarka.
  • Tada paleisti ciklą cikle, kuris tikrintu pirmą žodį su antru ir t. t., kol kitų žodžių ilgis atitiktų pirmo žodžio ilgį arba kol ras bent vieną pasikartojantį. Prieš tai reiktų apsaugos, kuri patikrintų ar tikrinamo žodžio nėra anksčiau minėtam masyve (masyve saugojam 10 ilgiausių pasikartojančių bent vieną kartą žodžių).
  • Patikrinti ar rado pasikartojančių.
  • Jei rado, dėti pasikartojantį žodį į atskirą masyvą (10 ilgio).

Dekui, bet man kyla problemu jau del rikiavimo. Kode meginu rasti ilgiausius zodzius, taciau niekne nepavyksta. Ko truksta?



void Rikiuoti(Knyga & Kn1, Knyga & Kn2){
string zodis;
string tinkamas;
for(int i=0; i<Kn1.ImtiN(); i++){
	zodis = Kn1.Imti(i);
	for(int j=0; j<Kn2.ImtiN(); j++){
		if(zodis == Kn1.Imti(i) && zodis == Kn2.Imti(j)){ // tikrinu ar abiejuse failuose yra tas pats zodis
			if(zodis.length() < Kn2.Imti(j).length()){
				zodis = Kn2.Imti(j);
			}
		}
	}
}
}

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui, bet man kyla problemu jau del rikiavimo. Kode meginu rasti ilgiausius zodzius, taciau niekne nepavyksta. Ko truksta?



void Rikiuoti(Knyga & Kn1, Knyga & Kn2){
string zodis;
string tinkamas;
for(int i=0; i<Kn1.ImtiN(); i++){
	zodis = Kn1.Imti(i);
	for(int j=0; j<Kn2.ImtiN(); j++){
		if(zodis == Kn1.Imti(i) && zodis == Kn2.Imti(j)){ // tikrinu ar abiejuse failuose yra tas pats zodis
			if(zodis.length() < Kn2.Imti(j).length()){
				zodis = Kn2.Imti(j);
			}
		}
	}
}
}

Dabar pagalvok logiskai, ka tu galvoji surikiuot, kai bandai "rikiuot" du skirtingus objektus vienas kito atzvilgiu?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dabar pagalvok logiskai, ka tu galvoji surikiuot, kai bandai "rikiuot" du skirtingus objektus vienas kito atzvilgiu?

Siaip bandziau as cia ir burbulo metoda, taciau nieks nepavyksta. Idomu ar su string veikia burbulas, nes kiek ziurejau tai lyg taip. Bet man nedareto ko norejau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Siaip bandziau as cia ir burbulo metoda, taciau nieks nepavyksta. Idomu ar su string veikia burbulas, nes kiek ziurejau tai lyg taip. Bet man nedareto ko norejau.

Cia ne algoritme ar jo pasirinkime beda, cia tavo toj algoritmo realizacijoj kvailoj beda. Burbulas viska daro, ko tau reikia, tik tu neparasai jo taip, kaip reikia. Sakykim taip, turi du masyvus A[5] = {5, 2, 3, 1, 4} ir B [5] = {1, 2, 5, 3, 4}, suki du ciklus, vienas eina per A, kitas per B ir lygini tarpusavi ju narius (A[1] < B[1] ir t.t.) tai kaip galvoji, kuris masyvas cia gali issrikiuot ir kaip? Absoliuciai cia jokio logikos, o vat butent taip tu ir bandai padaryti. Kai rikiuoji, turi tikrint tam tikros duomenu talpyklos narius tarpusavi, mano pavyzdzio atveju A[1] < A[2], A[1] < A[3] ir t.t. ir juo sukeist vietom, jei tau reikalinga salyga (didejanciai/mazejanciai) yra tenkinama.

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gerai, mano rikiavimas

void Rikiuoti(Knyga & Kn1, Knyga & Kn2){
Knyga Rik;
int m;
for(int i=0; i<Kn1.ImtiN(); i++){
	m = i;
	for(int j = i+1; j<Kn1.ImtiN(); j++){
		if(Kn1.Imti(i).length() < Kn1.Imti(j).length()){
			m = j;
		}
	}
	Rik.Imti(i) = Kn1.Imti(i);
	Kn1.Imti(i) = Kn1.Imti(m);
	Kn1.Imti(m) = Rik.Imti(j);
}
}

Kodel jis neveikia?

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gerai, mano rikiavimas

void Rikiuoti(Knyga & Kn1, Knyga & Kn2){
Knyga Rik;
int m;
for(int i=0; i<Kn1.ImtiN(); i++){
	m = i;
	for(int j = i+1; j<Kn1.ImtiN(); j++){
		if(Kn1.Imti(i).length() < Kn1.Imti(j).length()){
			m = j;
		}
	}
	Rik.Imti(i) = Kn1.Imti(i);
	Kn1.Imti(i) = Kn1.Imti(m);
	Kn1.Imti(m) = Rik.Imti(j);
}
}

Kodel jis neveikia?

Sukeitimas visiska nesamone. Imti metodai grazina reiksme (pagal ju pavadinima taip turetu but), kaip tu ten kazkam priskirt ju pagalba bandai tai nesuprantu. Plius sukeitime i/j/m taip blogai naudojamos. Sukeitimas vyksta taip: int a, int b, int c; c = a; a = b; b = c, siuo atveju sukeisti a ir b. Ir siaip pastebejimas, sukeitima manau geriau pasirasyti klases "Knyga" viduj ir prireikus iskviesti. Butu kazkas panasaus:

void Sukeitimas (int a, int b) {
    kintamojo_tipas papildomas;
    papildomas = objektu_masyvas[a];
    objektu_masyvas[a] = objektu_masyvas[b];
    objektu_masyvas[b] = papildomas;
}

 

Tada is savo ciklo trini ta sukeitima ir jo vietoj rasai:

Sukeitimas(i, m);

 

Ir siaip, jei nezinai, kaip sukeisti, siulau pasidometi funkcija swap: http://www.cplusplus.com/reference/algorithm/swap/

Redagavo hafnis1324
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ą...