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 &? |
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 |
|
|
|