Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 2.473 pregleda

Najnovija ↓

Kako da upisem alfabet u string automatski? 15.10.2012. u 21:23 · pre 170 meseci #1
Hocu da upisem alfabet, a da ne ubacujem jedno po jedno slovo? Da ga nekako unesem automatski, nekom komandom.
Potpis
Mi letimo u nebo i znamo svoj put :)
Re: Kako da upisem alfabet u string automatski? 15.10.2012. u 23:33 · pre 170 meseci
izmenjeno 1 put, poslednji put X Files 16.10.2012. u 07:08
  1. X Files16.10.2012. u 07:08zapis iz teksta poruke
#2
Ovako sam resio:
Code:

#define MAX 100
int main()
{
    int i=0,j;
    char x[MAX];
    for(j=65;j<91;j++) // U ASCII tabeli A=65, Z=90.
    x[i++]=j;             //  J preuzima te vrednosti i dodaje u X[i].
    puts(x);
    return 0;
}

Izbacuje kuke i kvake posle alfabeta, ali za ono sto mi je trebalo radi posao.

Ako neko ima resenje neka javi.
Potpis
Mi letimo u nebo i znamo svoj put :)
Re: Kako da upisem alfabet u string automatski? 16.10.2012. u 06:11 · pre 170 meseci #3
Evo ti isto rešenje, samo sa tačnom dužinom niza i po meni malo lepše napisano (ovo 65 i 91 mi se nikako ne sviđa ;) ).

Code (c):

int main() {
    int i;
    char letters['Z'-'A'+1];
    for (i = 'A'; i <= 'Z'; i++) {
        letters[i-'A'] = i;
    }
    puts(letters);
    return 0;
}
 
Re: Kako da upisem alfabet u string automatski? 16.10.2012. u 12:05 · pre 170 meseci
izmenjeno 1 put, poslednji put X Files 16.10.2012. u 13:32
  1. X Files16.10.2012. u 13:32zapis iz teksta poruke
#4
Funkcija puts očekuje parametar koji je string ograđen nul karakterom (zero terminated string). Pre pozivanja funkcije puts stavi x[i ]='\0'; i smeće na kraju niza se neće više videti.
Sviđa mi se1
Re: Kako da upisem alfabet u string automatski? 16.10.2012. u 20:10 · pre 170 meseci #5
Jel mozes da mi razjasnis ovo: ['Z'-'A'+1] i peti red?

Zasto takav izraz kad je ovako jednostavnije?

int main() {
int i,j=0;
char letters[j];
for (i = 'A'; i <= 'Z'; i++) {
letters[j++] = i;
}
puts(letters);
return 0;
}

Da li to nesto znaci ili ne? Hvala
Potpis
Mi letimo u nebo i znamo svoj put :)
Re: Kako da upisem alfabet u string automatski? 17.10.2012. u 11:33 · pre 170 meseci #7
Linija char letters[j]; ne bi trebalo da se kompajlira jer vrednost j mora da bude poznata u vreme kompilacije, to jest mora da bude konstanta. Ti si to rešio sa MAX a del-boy je to rešio sa 'Z'-'A'+1. Ista stvar, s tim što del-boyevo rešenje ne uvodi bespotrebno novi podatak, i bolje se iz koda vidi čemu niz služi. Del-boy je takođe uspeo da ukloni promenljivu j, što je okej. Tek u velikim projektima shvatiš da što imaš manje delova (konkretno manje promenljiva) u kodu to je manja verovatnoća da nešto u nekom trenutku (kad menjaš kod) pođe naopako.
Re: Kako da upisem alfabet u string automatski? 17.10.2012. u 12:44 · pre 170 meseci #8
Citat:
svemirski_brod:
Jel mozes da mi razjasnis ovo: ['Z'-'A'+1] i peti red?

Zasto takav izraz kad je ovako jednostavnije?

int main() {
int i,j=0;
char letters[j];
for (i = 'A'; i <= 'Z'; i++) {
letters[j++] = i;
}
puts(letters);
return 0;
}

Da li to nesto znaci ili ne? Hvala


Već je Mihajlo razjasnio neke stvari, ali ipak da odgovorim.

Kad praviš niz moraš mu zadati veličinu. U prvom primeru ti si zakucao veličinu niza na 100 elemenata iako ti ne treba toliko. Bolja alternativa je zauzmeš mesta koliko ti treba. To možeš uraditi tako što ćeš na papiru (ili u glavi) sračunati i napisati broj ili pustiti program da računa. 'Z' - 'A' + 1 daje dovoljno mesta da se smeste velika slova engleskog alfabeta.

Što se petog reda tiče - to je samo način da sračunam lokaciju gde treba upisati slovo bez korišćenja dodatne promenljive, jer realno nije potrebna. Meni lično je ovakav zapis čitljiviji od tvog.

Generalno gledam da izbegavam magične brojeve (veličina niza, ASCII kod slova itd.) ako mogu kod da napišem i da ga razumem bez gledanja u neki spoljnji izvor informacija (u ovom slučaju ASCII tabela). To je jedini razlog zašto sam poslao i drugo rešenje, ništa više ;)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme