Ovo je mali tutorial samo zato jer vidim puno vas radi ovu grešku pa ću vam pojasniti zašto ne koristiti strlen u petljama u, pogotovo for petlji u iteraciji.
Primjer:
for(PoÄetno stanje; Uvjet; Izraz)
PoÄetno stanje - Od kuda se petlja poÄinje vrtiti
Uvjet - Iteracija, do kada će se petlja vrtiti
Izraz - PoveÄanje, smanjenje, najÄešće inkrement i dekrement
Primjer u praksi:
new niz[] = "AbCdEfG";
for(new i = (0); i < strlen(niz); ++ i) // POREÅ NO!
Zašto:
new string[128] = "\0"; // stvaramo prazni string
format(string, (sizeof string), "ABCDEF"); // zapisujemo u string ABCDEF
printf("sizeof = %d", (sizeof string)); // Return 128
printf("strlen = %d", strlen(string)); Return 5
strlen prebrojava svako polje, Å¡to bi rezultiralo u petljama da svaku iteraciju prebrojava polja ispoÄetka, Å¡to nepotrebno usporava petlju, ispravan naÄin bi bio da jednom prebrojite polja tj. spremite ih u varijablu koja nije u iteraciji kako bi u iteraciji pristupila petlja već postojećoj varijabli u glavnoj memoriji.
primjer u praksi:
new nesto[] = "AAAAAAAAAA";
for(new i = (0), duzina = strlen(nesto); i < duzina; ++ i) // Ispravno!
ili
new nesto[] = "AAAAAAAA", duzina = strlen(nesto);
for(new i = (0); i < duzina; ++ i) // Ispravno!
Isto je i sa drugim petljama:
while(uvjet)
primjer u praksi:
new i = (0), string[] = "AAAAAA";
while(i < strlen(string)) // krivo!
Razlog je isti kao i sa for petljom, svaku iteraciju će prebrojavati string, a to je ne potrebno tj. može doÄi do lagga
new string[] = "aaaaaaa", i = (0), duzina = strlen(string);
while(i < duzina) // ispravno!
do while
primjer u praksi:
new nesto[] = "AAAAA";
do
{
++ i;
}
while(i < strlen(nesto)); // krivo!
new nesto[] = "AAAAA", duzina = strlen(nesto);
do
{
++ i;
}
while(i < nesto); // Ispravno!
Zaključano
[TUT] Zašto ne koristiti strlen u iteraciji
1,971
pregleda
7
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava