|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
15.5.2012, 23:13 | #1 |
Banned
|
Uporedjivanje slova u 2 stringa (C++)
Pozdrav
Ceo dan lupam glavom, i nikako ne moze da mi padne ni jedna ideja kako da resim sledeci problem. Treba da uporedim 2 stringa (dve reci), tako da dobijem TRUE (or FALSE) ako se slova iz prve reci nalaze u drugoj. Primer: 1.Rec: imati 2.Rec: informatika Resenje: True Kako ovo da uradim? Inace, ovo vezbam za prijemni na PMF-u u Nisu, pa je ovo jedan od zadataka, za koje jednostavno nemam ideju. A ima ih jos, tako da ako je neko raspolozan da mi pomogne, bio bih mu zahvalan |
15.5.2012, 23:18 | #2 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.163
Zahvalnice: 2.082
Zahvaljeno 4.922 puta na 2.858 poruka
|
Re: Uporedjivanje slova u 2 stringa (C++)
Ono što tebi treba bi išlo na sledeću foru:
Kod:
std::string string1 = "imati"; std::string string2 = "informatika"; bool Sadrzi = true; for (int i = 0; i < string1.length(); i++) Sadrzi = Sadrzi && (int(string2.find(string1[i])) >= 0); std::cout << Sadrzi << std::endl; "Sadrži" inicijalno mora biti true, jer ako je false, kasnije and-ovanje sa bilo čim će uvek biti false. Poslednja ispravka: voodoo_ (16.5.2012 u 0:16) |
16.5.2012, 0:57 | #3 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: Uporedjivanje slova u 2 stringa (C++)
Mozda nije dozvoljeno koristiti string klasu?
Kod:
char* nadji_char(char c, char* begin, char* end) { for(; begin != end; ++begin) { if(*begin == c) return begin; } return end; } bool sadrzi(char* s1, char* s2, bool poRedosledu = false) { unsigned sz1 = strlen(s1); unsigned sz2 = strlen(s2); char* end = s2 + sz2; for(unsigned i = 0; i < sz1; ++i) { char* res = find_char(s1[i], s2, end); if(poRedosledu) s2 = res; if(end == res) return false; } return true; } ... char* str1 = "imati"; char* str2 = "informatika"; std::cout << std::boolalpha << sadrzi(str1, str2) << std::endl; |
16.5.2012, 17:45 | #4 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.163
Zahvalnice: 2.082
Zahvaljeno 4.922 puta na 2.858 poruka
|
Re: Uporedjivanje slova u 2 stringa (C++)
Optimizovana varijanta mog koda:
Kod:
std::string string1 = "imati"; std::string string2 = "informatika"; bool Sadrzi = true; for (int i = 0; i < string1.length(); i++) if (int(string2.find(string1[i])) < 0) { Sadrzi = false; break; } std::cout << Sadrzi << std::endl; |
18.5.2012, 19:31 | #5 | |
V.I.P. Programiranje
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
|
Re: Uporedjivanje slova u 2 stringa (C++)
Citat:
Nije da je specificno napisano u opisu zadatka u prvom postu, al prilicno sam siguran da ne treba da prihvatis sledecu situaciju: [ Ananas ] se trazi u reci [ ans ] tvoj program bi prosao kroz svako slovo reci "Ananas" i video da postoji svako od njih u reci [ ans ] jer jedno slovo iz druge reci moze da koristi da upari vise slova iz prve. dakle, pored svega vec recenog, treba da vodis status za svako slovo reci u kojoj se trazi koji bi ti rekao da li je iskorisceno, ili jos lakse, da svako slovo koje uparis obrises iz reci u kojoj se trazi kako se ne bi naslo sledeci put. |
|
18.5.2012, 23:30 | #6 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.163
Zahvalnice: 2.082
Zahvaljeno 4.922 puta na 2.858 poruka
|
Re: Uporedjivanje slova u 2 stringa (C++)
Kod:
std::string string1 = "imati"; std::string string2 = "informatika"; bool Sadrzi = true; int rezultat; for (int i = 0; i < string1.length(); i++) { rezultat = int(string2.find(string1[i])); if (rezultat < 0) { Sadrzi = false; break; } else string2[rezultat] = '#'; } std::cout << Sadrzi << std::endl; |
20.5.2012, 16:53 | #7 |
V.I.P. Programiranje
|
Re: Uporedjivanje slova u 2 stringa (C++)
Ta rešenja su sva u O(nm), možda mu treba nešto brže? Za velike stringove može mnogo da se otegne.
Kod:
#include <cstring> #include <cstdio> int main() { char* string1 = new char[513], *string2 = new char[513]; int occurrences[256], *occurrences_end = occurrences + 256; memset(occurrences, 0, sizeof(occurrences)); memset(string1, 0, 513 * sizeof(char)); memset(string2, 0, 513 * sizeof(char)); fputs("unesite string 1: ", stdout); fscanf(stdin, "%512s", string1); fputs("unesite string 2: ", stdout); fscanf(stdin, "%512s", string2); char *p1 = string1, *p2 = string2; while (*p1 || *p2) { if (*p1) ++occurrences[*p1]; if (*p2) --occurrences[*p2]; ++p1, ++p2; } bool bad = false; for (int *p = occurrences; p < occurrences_end; ++p) if (*p > 0) { fputs("nema svih slova\n", stdout); bad = true; break; } if (!bad) fputs("sva slova su tu\n", stdout); return 0; } EDIT: Sad tek videh od kad su poruke |
21.5.2012, 19:31 | #8 | |
V.I.P. Programiranje
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
|
Re: Uporedjivanje slova u 2 stringa (C++)
Citat:
Dakle, i tebi je vrlo jasno da mu ne treba neka super optimizacija nego razumevanje osnovnih operacija i gradjenje jednostavnih algoritama, to je poenta prijemnog. Slobodno reci "e, ljudi, vidite kako bi ja to ekstra napisao", nije sramota u tvojim godinama. |
|
21.5.2012, 20:11 | #9 |
V.I.P. Programiranje
|
Re: Uporedjivanje slova u 2 stringa (C++)
Nisam obratio pažnju na to za šta mu treba, samo sam video pitanje i spora rešenja i predložio brže. Prost je algoritam, nema tu "vidite kako bih ja to ekstra napisao", moja je samo najbolja namera.
|
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci: | ||
chaami (22.5.2012) |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Vicevi | Oblivion | Cvet kompjutera | 5481 | 27.5.2022 5:52 |
Prikaz kineskih slova | Jovan Verbic | Operativni sistemi | 3 | 17.5.2011 12:10 |
PHP problem-kako izbaciti iz stringa sve karaktere osim slova | kovacevicdr | Programiranje | 7 | 27.4.2010 1:11 |
Programi napisani u Clipperu 5.3 - naša slova u XP-u u grafičkom modu | Odisejyu | Programiranje | 0 | 25.7.2008 22:25 |
Menjanje slova za hdd i dvd | Pjanovic | Operativni sistemi | 5 | 3.3.2008 18:35 |