C++ Pomoc u zadatku

poruka: 3
|
čitano: 2.589
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
neaktivan
offline
C++ Pomoc u zadatku

Pozdrav, imali smo jedan skolski zadatak iz programiranja u kojem se trazi sljedece:

Napisati program koji od korisnika trazi da unese string, a potom kreira novi string (nije bitno kako ce se varijabla zvati) u kojem ce se nalaziti vase ime, razmak, uneseni string, razmak, prezime. Nakon toga je jos potrebno ispisati taj novi string i ispisati kolika je njegova duzina.
Primjer: korisnik je unio string Obala
Rezultat pokretanja vaseg programa treba da izgleda ovako:
Armin Obala Nogo
Duzina novog stringa je 16
Ja sam zadatak uradio, ali imam jedan problem. Moj ispis izgleda kao "Armin ObalaNogo", to jeste, fali taj jedan space poslije Obala. Ako moze neko pomoci, bio bih mu zahvalan? Evo kako moj kod izgleda.

#include <iostream>
#include <string>

using namespace std;

int main(){
    string unos;
    string ip="Kenan Izetbegovic";
    string pomocni=ip;
    cout<<"Unesite neku rijec:"<<endl;
    getline(cin, unos);
   
    for(int x=0;x<unos.length()+ip.length();x++){
        if(ip[x]==' '){
            pomocni.insert(x+1,unos);
            ip=pomocni;
        }
    }
    cout<<ip<<endl;
    int vrijednost=ip.length();
    cout<<"Duzina novog stringa je "<<vrijednost<<endl;
    return 0;
       
}

Kebab
Moj PC  
0 0 hvala 0
8 godina
protjeran
offline
C++ Pomoc u zadatku

#include <iostream>

#include <string>

 

using namespace std;

 

int main(){

 

    string niz = "ime prezime";

    string ime;

    string prezime;

    string rijec;

    int brojac = 0;

 

    cout << "unesite neku rijec: ";

    cin >> rijec;

 

    rijec += " ";

 

    while(niz[brojac] != ' '){

        brojac++;

    }

 

    int indeks = brojac + 1;

    string delimiter = " ";

 

    ime = niz.substr(0, niz.find(delimiter));

    prezime = niz.substr(indeks);

 

    ime += " ";

    ime += rijec;

    ime += prezime;

 

    cout << ime << endl;

    cout << "duzina novog stringa je " << ime.length();

   

    return 0;       

}

Poruka je uređivana zadnji put ned 14.3.2021 15:10 (ivanlotz).
 
1 0 hvala 1
15 godina
offline
Re: C++ Pomoc u zadatku
kenomax kaže...

Pozdrav, imali smo jedan skolski zadatak iz programiranja u kojem se trazi sljedece:

Napisati program koji od korisnika trazi da unese string, a potom kreira novi string (nije bitno kako ce se varijabla zvati) u kojem ce se nalaziti vase ime, razmak, uneseni string, razmak, prezime. Nakon toga je jos potrebno ispisati taj novi string i ispisati kolika je njegova duzina.
Primjer: korisnik je unio string Obala
Rezultat pokretanja vaseg programa treba da izgleda ovako:
Armin Obala Nogo
Duzina novog stringa je 16
Ja sam zadatak uradio, ali imam jedan problem. Moj ispis izgleda kao "Armin ObalaNogo", to jeste, fali taj jedan space poslije Obala. Ako moze neko pomoci, bio bih mu zahvalan? Evo kako moj kod izgleda.

#include <iostream>
#include <string>

using namespace std;

int main(){
    string unos;
    string ip="Kenan Izetbegovic";
    string pomocni=ip;
    cout<<"Unesite neku rijec:"<<endl;
    getline(cin, unos);
   
    for(int x=0;x<unos.length()+ip.length();x++){
        if(ip[x]==' '){
            pomocni.insert(x+1,unos);
            ip=pomocni;
        }
    }
    cout<<ip<<endl;
    int vrijednost=ip.length();
    cout<<"Duzina novog stringa je "<<vrijednost<<endl;
    return 0;
       
}

 -idi redom i čitaj kod, gdje imaš space (" " = razmak) gdje nemaš između riječi?

-zadao si ime i prezime kao jedan string, u kodu "Kean Izetbegović" u postu "Armin Nogo" .. razdvojio si ime-prezime tako da je ostao razmak nakon imena tj "Armin " dok je prezime bez razmaka "Nogo".. mogao is razdovjiti npr "Armin" (bez razmaka) i prezime s predvodećim razmakom " Nogo" .. no oba načina imaju manu, 'neuredni' jer imaju char viška, razmak koji ne pripada imenu-prezimenu.. tj to je samo u ovom primjeru ok jer neovisno o načinu dobiješ željeni rezultat.. čisti uredni kod bi bio da neovisno o broju riječi ili razmaku-spaceru koji ne mora biti space=" " nego bilo što npr točka ili @ .. ili bez.

-tj u dijelu gdje slažeš novi string možeš to sve i tad je čitko-uredno, jasno svakom na prvi pogled.. (koristit ću c/p posta iznad.. tog dijela + izmjenu.. sam post ti daje odgovor ovo je dodatak ili 'cjepidlačenje'). :))

 

    ime += " ";

    ime += rijec;

    ime += prezime;

 

izmjena, bez dodavanja prije tj na drugom mjestu, nego na jednom, gdje se tad sve vidi-pregledno..

 

    ime +="";

    ime += ime;

    ime += " ";

   ime += rijec;

   ime += " ";

    ime += prezime;

 

itd.. i tad ako želiš izmjenu, space zamijeniš drugim znakom i sl. na jednom mjestu, urednije.. tj tad je i traženje greške, ispravljanje-održavanje (debugiranje) lakše.. tj često je i samo pisanje koda važno kao i kod (nije važno kad je samo za jednu upotrebu, kao školski primjer.. no i tad je važno jer se tako pravilno uči, urednije.. dok u produkciji jednostavno moraš biti pedantan jer ćeš sutra to tražiti-ispravljati ili neka treća osoba na tvom radnom mjestu..

 

ako isti takav kod radiš u npr fornext petlji, tad za ovakav primjer samo paziš na zadnji spacer koji umećeš, tj zadnji je jedan manji od broja riječi koje razdvaja, tj tri riječi su dva umetnuta spacera..

 

pa sad pitanje, jer je stvar učenja... :)) kako bi optimizirao zauzeće, npr osnove zip kompresije tj izbacivanje viška koda ili dijela stringa koji se ponavlja?

-pa možeš sve riječi zapisati kao jednu, bez razmaka, ime+prezime ArminNogo .. i sve što je potrebno je index, mjesto gdje znaš da mora ići razmak ili željeni znak.. tj uz to bi imao relaciju (kao bazu) koja bi sadržavala duljinu prve riječi (ime, Armin, len = 5, prezime Nogo len = 4 .. kao i unesena riječ-string Obala 5..) i u index-bazi zapišeš taj broj, 5, 4, 5 .. tj tad izmeš sljepljeni string i režeš ga čitajući redom te brojeve.. tako si umjesto fixnog spacera smanjio unos u bazi, podatak je time manji-brži za baratanje, traži manje resursa itd.. + .. ali to nije sve :)) u ovom slučaju može i tirk, tj ako je svako ime početno veliko slovo, ako je prezime početno veliko slovo .. a u tvom primjeru je i umetnuta riječ-string početno veliko slovo, tad izbaciš nepotrebnu index-len bazu tj kriterij je tad veliko slovo.. i tražiš len do upercase slova, tj to može samo ako su sva početna slova velika tj tad je ok kriterij, ako unos korinika dozvoljava i malo slovo za početno tad to nije moguće-dobro tj ostalo bi sljepljeno ime+prezime, dok bi samo prezime bilo pravilno odrezano-izvađeno i iduće ime..

-dovoljno razumljivo? :)

 

edit: ili u čemu je razlika, ako imenu dodaš razmak + prvi primjer.. ili ako ime sadrži samo ime + linija koda za razmak + ostalo dalje..

pa razlika je ako se zadatak promijeni, npr ako glasi da ispišeš prezime-riječ-ime itd.. tj drugu kombinaciju .. a tad je spacer zaljepljen na pogrešno mjesto tj dva puta ili bez, dok drugi primjer to eliminira tj samo muvneš liniju koda ime-prezime na željeno mjesto-redosljed dok ostatak ostaje isti i radi točan-isti rezultat ..

-sve se može napraviti na više načina, izbor načina je ono što trebaš učiti, žonglirati.. optimalno + upotrebljivost za ostale potrebe + održavanje ili neki kriterij kao brzina-resursi itd.

C64/TurboModul-OpenSourceProject.org.cn.部分作品为网上收集整理,供开源爱好者学习使用
Poruka je uređivana zadnji put pon 15.3.2021 12:21 (ihush).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice