Forum » Programiranje » težava z nizi
težava z nizi
benzo11 ::
Pozdravljeni!
No v šoli smo dobili nalogo; Napiši program, ki v enodimenzionalno polje 50 znakov prebere niz, nato pa celotno polje izpiše v obliki števil (ASCII kod znakov). Preizkusi program z različnimi nizi in opazuj, kje se nahaja zaključni znak '\0'.
Ne razumem nizov, zato prosim da mi nekdo napiše nekaj komentarjev glede nizov,
Lp
No v šoli smo dobili nalogo; Napiši program, ki v enodimenzionalno polje 50 znakov prebere niz, nato pa celotno polje izpiše v obliki števil (ASCII kod znakov). Preizkusi program z različnimi nizi in opazuj, kje se nahaja zaključni znak '\0'.
Ne razumem nizov, zato prosim da mi nekdo napiše nekaj komentarjev glede nizov,
Lp
Tutankhamun ::
char tab[50]; strcpy(tab, "benzo11 & Tutan"); for(int i = 0; i < 50; i++) cout << tab[i] << ": " << (int)tab[i] << endl;
To sm tko mal na pamet napisu.
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
Ktj ::
Da dobimo nek niz (ang. sting) najprej protrebujemo 2 pogoja:
1. Nek kos pomnilnika
primer: char niz[50];
2. Neko "besedilo" ki ha shranimo v string.
primer: strcpy(niz, "Test");
niz[0] = 'T'
niz[1] = 'e'
niz[2] = 's'
niz[3] = 't'
niz[4] = '\0'
'\0' znak označuje da je konec niza.
probaj se poigrati s sledečo kodo:
int main()
{
char niz[50];
strcpy(niz,"Napisi nekaj, ki ni daljse od 50 znakov");
for(int i = 0; i < = strlen(niz); i++)//strlen pove koliko je niz dolg gledena to kdaj najde prvi '<46febbe748220314b93ef5001b4123e1>' znak
{
printf("niz[%d] = %c\n", i, niz[i]);
}
return 0;
}
1. Nek kos pomnilnika
primer: char niz[50];
2. Neko "besedilo" ki ha shranimo v string.
primer: strcpy(niz, "Test");
niz[0] = 'T'
niz[1] = 'e'
niz[2] = 's'
niz[3] = 't'
niz[4] = '\0'
'\0' znak označuje da je konec niza.
probaj se poigrati s sledečo kodo:
int main()
{
char niz[50];
strcpy(niz,"Napisi nekaj, ki ni daljse od 50 znakov");
for(int i = 0; i < = strlen(niz); i++)//strlen pove koliko je niz dolg gledena to kdaj najde prvi '<46febbe748220314b93ef5001b4123e1>' znak
{
printf("niz[%d] = %c\n", i, niz[i]);
}
return 0;
}
fiction ::
'\0' znak označuje da je konec niza.Ravno zato je:
for(int i = 0; i < = strlen(niz); i++)ponavadi bolje nadomestiti z
for(int i = 0; niz[i] != '\0'; i++)ali kaksno krajso razlicico tega.
V prvem primeru namrec za vsak obhod zanke poklices strlen(). Ta pa je v bistvu sam neka zanka, ki
gleda kje je '\0'. Namesto O(n) imas tako casovno kompleksnost O(n^2). Sej ne dvomim, da ne bi znal C prevajalnik tega optimizirati, tako da se ne bi ves cas klical strlen(). Ampak zakaj ne bi ze sam tega napisal bolj efektivno, ce lahko. Mogoce koda res ne zgleda najbolj lepo, je pa druga verzija vsaj dokaz, da ves kaj pocnes. In pri delu z nizi v C-ju, kjer je lahko hitro pride do buffer overflowa, je zelo priporocljivo tocno vedeti kaj se dogaja.
Ktj ::
Se zavedam tega kar si napisal fiction, vendar nevemkako, da mi ni takrat v glavo padl, verjetno zaradi nonstop učenja pred izpiti ^^.
Gledena to da dela z nizi je pa vseno mogoče prav omeniti strlen....
O ja, sem še prevečkrat mel probleme s tem .
Gledena to da dela z nizi je pa vseno mogoče prav omeniti strlen....
... In pri delu z nizi v C-ju, kjer je lahko hitro pride do buffer overflowa, je zelo priporocljivo tocno vedeti kaj se dogaja.
O ja, sem še prevečkrat mel probleme s tem .
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Niti - segmentation faultOddelek: Programiranje | 1998 (845) | galu |
» | Pomoč pri programiranju z javoOddelek: Programiranje | 3582 (2509) | milc |
» | [C#] Input string was not in a correct format.Oddelek: Programiranje | 1096 (1033) | Cvenemir |
» | c++ nalogeOddelek: Programiranje | 2878 (2502) | l0g1t3ch |
» | delo z niziOddelek: Programiranje | 2998 (2542) | tx-z |