Uso dei puntatori C++
#include
#include
int main()
{
using namespace std;
char *ptr="Prova cambio di stringa";
char *ptr2;
int i;
ptr2=ptr;
for (i=0;i
{
if (*ptr2='a')
{
*ptr2='d';
system("pause");
}
}
cout<
system("pause");
}
Ragazzi non capisco cosa non vada in questo codice...voglio semplicemente cambiare le 'a' in 'd'...non ha mai funzionato
#include
int main()
{
using namespace std;
char *ptr="Prova cambio di stringa";
char *ptr2;
int i;
ptr2=ptr;
for (i=0;i
if (*ptr2='a')
{
*ptr2='d';
system("pause");
}
}
cout<
system("pause");
}
Ragazzi non capisco cosa non vada in questo codice...voglio semplicemente cambiare le 'a' in 'd'...non ha mai funzionato
Risposte
Ciao,
prima metti il codice nei tag [code] così rimane l'indentazione anche se codice banale.
oddio
in 10 righe ci sono un sacco di errori di programmazione e concettuali...
Poi a parte cosa debba fare il codice, prima evita di usare system("pause") che a mio avviso è mal programmazione.
Poi se metti in un if(a=b) vuol dire assegnare il valore di $a$ in $b$ non è un'uguaglianza, corretto è if(a==b).
Poi il ciclo for nel tuo codice non serve proprio a nulla, il valore di $i$ dov'è che lo usi, dov'è l'array?
la stringa è un array di char perchè usi *ptr, questo punterà sempre al valore puntato da ptr, mica cicli nella stringa.
.....
prima metti il codice nei tag [code] così rimane l'indentazione anche se codice banale.
oddio

Poi a parte cosa debba fare il codice, prima evita di usare system("pause") che a mio avviso è mal programmazione.
Poi se metti in un if(a=b) vuol dire assegnare il valore di $a$ in $b$ non è un'uguaglianza, corretto è if(a==b).
Poi il ciclo for nel tuo codice non serve proprio a nulla, il valore di $i$ dov'è che lo usi, dov'è l'array?
la stringa è un array di char perchè usi *ptr, questo punterà sempre al valore puntato da ptr, mica cicli nella stringa.
.....
Nell' "if" vedo un errore di sintassi, innanzitutto.
Per il resto, penso che il problema sia che tu confronti la stringa intera con il carattere 'a', mentre dovresti confrontare il singolo elemento della stringa str con 'a'. Ricorda che le stringhe sono array alla fine!
Per il resto, penso che il problema sia che tu confronti la stringa intera con il carattere 'a', mentre dovresti confrontare il singolo elemento della stringa str con 'a'. Ricorda che le stringhe sono array alla fine!
Ciao!
Ho letto il tuo codice, e ho trovato alcune imperfezioni:
- Un puntatore non può contenere una stringa, ma solo un indirizzo di memoria.
Di conseguenza, non puoi dichiarare
ma
- l'accesso ai singoli caratteri della stringa è errato.
Dovresti dichiarare
oppure
- L' istruzione if è espressa in modo errato: utilizzi l' operatore d' assegnamento anziché quello d' uguaglianza.
Ecco il programma corretto:
Ho letto il tuo codice, e ho trovato alcune imperfezioni:
- Un puntatore non può contenere una stringa, ma solo un indirizzo di memoria.
Di conseguenza, non puoi dichiarare
char *ptr="Prova cambio di stringa";
ma
char ptr[]="Prova cambio di stringa";
- l'accesso ai singoli caratteri della stringa è errato.
Dovresti dichiarare
*(ptr2+i)='d';
oppure
ptr2[i]='d';
- L' istruzione if è espressa in modo errato: utilizzi l' operatore d' assegnamento anziché quello d' uguaglianza.
Ecco il programma corretto:
#include <iostream> #include <cstdio> using namespace std; int main() { char ptr[]="Prova cambio di stringa"; char *ptr2; unsigned int i; ptr2=ptr; for (i=0;i<strlen(ptr);i++) { if (*(ptr2+i)=='a') { *(ptr2+i)='d'; } } cout<<ptr<<endl; system("pause"); return 0; }
avete ragione...ho sbagliato a postarvi il codice ora lo sistemo un attimo...
"Omega":
Ecco il programma corretto:
Questo non si fa!
#include
#include
int main()
{
using namespace std;
char *ptr="Prova cambio di stringa";
char *ptr2;
int i;
ptr2=ptr;
for (i=0;i
{
if (*ptr2=='a')
{
*ptr2='d';
ptr2++;
}
}
cout<
system("pause");
}
Inizialmente era questo il mio codice, ma a quanto mi ha fatto capire Omega è sbagliata la parte iniziale in cui memorizzo la stringa
#include
int main()
{
using namespace std;
char *ptr="Prova cambio di stringa";
char *ptr2;
int i;
ptr2=ptr;
for (i=0;i
if (*ptr2=='a')
{
*ptr2='d';
ptr2++;
}
}
cout<
system("pause");
}
Inizialmente era questo il mio codice, ma a quanto mi ha fatto capire Omega è sbagliata la parte iniziale in cui memorizzo la stringa
Grazie davvero Omega ma vorrei capire perchè era un errore
"Peco602":
Grazie davvero Omega ma vorrei capire perchè era un errore
L'errore è che tu non distingui tra stringa e singolo carattere: la stringa è un array di tanti caratteri, quindi devi trattarla come tale e confrontare il singolo elemento dell'array, quindi l'elemento str.
Per fare un esempio: se la stringa è char str="ciao" allora i suoi elementi sono
str[0]='c' str[1]='i' str[2]='a' str[3]='o'
A questi puoi accedere con la sintassi dei puntatori che ha usato Omega, se preferisci.
"Omega":
- Un puntatore non può contenere una stringa, ma solo un indirizzo di memoria.
Detto un po' alla buona, ma corretto.
"Omega":
Di conseguenza, non puoi dichiarare
char *ptr="Prova cambio di stringa";
ma
char ptr[]="Prova cambio di stringa";
Questo è errato. Puoi tranquillamente usare la prima o la seconda, entrambe dichiarano una variabile auto di nome 'ptr' che è un puntatore a char.
La differenza è un'altra. Nel primo caso, la stringa è una costante il cui indirizzo viene usato per inizializzare il puntatore, e una costante non è modificabile. Nel secondo, l'array (auto) ptr viene inizializzato con la stringa, che va nello spazio variabili.
La prima sintassi è da evitare per i motivi suddetti; se usi gcc, tanto per dire, dovresti avere un bel
warning: deprecated conversion from string constant to ‘char*’
Grazie mille ora mi è tutto chiaro....grazie