Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Algoritmi e strutture dati
 
puntatori - da minuscolo a maiuscolo
Clicca QUI per vedere il messaggio nel forum
guitux
ciao!
devo ammettere che ho qualche difficoltà con i puntatori....

se dichiaro:
char s[] = {"ciao mondo.\0"};
e volessi scrivere una funzione che trasformi la stringa s in maiuscolo dovrei fare:

char *maiuscolo(char *stringa) {
1) ciclare fino a quando non trovo il carattere di fine stringa
2) ad ogni iterazione, se carattere, converto da minuscolo in maiuscolo
3) sposto il puntatore al prossimo carattere
}

corretti i tre passaggi?
se non sbaglio, "stringa" punta al primo carattere del vettore "s"; nel punto 3) come si sposta il puntatore al prossimo carattere? forse con "stringa++;" ?

perchè "scanf("%s",var);" non vuole la &?

xSharKMaNx
http://homes.dsi.unimi.it/~aguzzoli/algo.htm

http://homes.dsi.unimi.it/~aguzzoli...lgo/lucidi3.pdf

Nel file Lucidi3.pdf Pagina 2 trovi la spiegazione di ciò che stai facendo!

Ciao

darkshadow
Originally posted by guitux
ciao!
devo ammettere che ho qualche difficoltà con i puntatori....

se dichiaro:
char s[] = {"ciao mondo.\0"};
e volessi scrivere una funzione che trasformi la stringa s in maiuscolo dovrei fare:

char *maiuscolo(char *stringa) {
1) ciclare fino a quando non trovo il carattere di fine stringa
2) ad ogni iterazione, se carattere, converto da minuscolo in maiuscolo
3) sposto il puntatore al prossimo carattere
}

corretti i tre passaggi?
se non sbaglio, "stringa" punta al primo carattere del vettore "s";



Esatto! s punta al primo carattere di stringa.


nel punto 3) come si sposta il puntatore al prossimo carattere? forse con "stringa++;" ?


usi un indice per spostarti.
es.
code:
int k; for (k = 0; stringa [k] != '\0'; k++) oppure k < strlen (stringa) {   stringa [k] = 'a'; }



perchè "scanf("%s",var);" non vuole la &?


perchè una stringa e un puntatore di caratteri ed è quindi già un indirizzo quindi non è necessario l'&.

PrizeD
ma si può usare un indice su un puntatore??tipo:
-------------------------------------------------------------------
char *stringa;
int k;
for (k = 0; stringa [k] != '\0'; k++) oppure k < strlen (stringa)
{
stringa [k] = toupper(stringa[k]);
}
-------------------------------------------------------------------

e poi ancora, posso fare così??

-------------------------------------------------------------------
char *stringa={"ciao\0"};
while(*stringa != '\0')
*stringa = toupper(*stringa++);
-------------------------------------------------------------------

darkshadow
Originally posted by PrizeD
ma si può usare un indice su un puntatore??tipo:
-------------------------------------------------------------------
char *stringa;
int k;
for (k = 0; stringa [k] != '\0'; k++) oppure k < strlen (stringa)
{
stringa [k] = toupper(stringa[k]);
}
-------------------------------------------------------------------

e poi ancora, posso fare così??

-------------------------------------------------------------------
char *stringa={"ciao\0"};
while(*stringa != '\0')
*stringa = toupper(*stringa++);
{
stringa [k] = toupper(stringa[k]);
}
-------------------------------------------------------------------


penso che in questo caso non cambia nulla perchè siccome stringa è un puntatore a chart (che alla fine è un int quindi 4 byte di solito) facendo stringa++ spostiamo il puntatore al prossimo indirizzo che in questo caso corrisponde al prossimo carattere nella stringa.
pero nel caso stringa fosse un array di record (struct) composta da + tipi facedo stringa++ ti spostaresti all'indirizzo del prossimo elemento nell'array dei record e in questo caso non otterresti lo stesso risultato.

ciao.



DS

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate