View Full Version : C e array
MaxGuevara
26-08-2005, 16:53
Ho un problema con le array,vorrei stampare a video una scritta togliendovi il primo carattere..mi spiego.
char scritta[20];
fscanf(stdin,"%s",scritta);
printf("%s",scritta);
ecco,mettiamo che,eseguito il programma si voglia scrivere:"-ciao sono io".
c'e' un modo per far sì che il carattere "-" non appaia?
grazie e ciao.
Ho un problema con le array,vorrei stampare a video una scritta togliendovi il primo carattere..mi spiego.
char scritta[20];
fscanf(stdin,"%s",scritta);
printf("%s",scritta);
ecco,mettiamo che,eseguito il programma si voglia scrivere:"-ciao sono io".
c'e' un modo per far sì che il carattere "-" non appaia?
grazie e ciao.
il modo più intuitivo e banale è :
char scritta[20];
char scrittab[19];
fscanf(stdin,"%s",scritta);
for ( x=1; x<=20; x++)
scrittab[x-1]=scritta[x];
printf("%s", scrittab);
Altrimenti :
char scrittab[19];
fscanf(stdin,"%s",scritta);
scrittab = scritta + 1;
printf("%s", scrittab);
GioVesas
26-08-2005, 18:32
Più semplicemente
printf("%s",&scritta[1]);
MaxGuevara
26-08-2005, 18:43
Grazie per l'aiuto.
Più semplicemente
printf("%s",&scritta[1]);
:p hai ragione... vabe i giri più lunghi fan capire meglio le cose.
VegetaSSJ5
26-08-2005, 19:38
Ho un problema con le array,vorrei stampare a video una scritta togliendovi il primo carattere..mi spiego.
char scritta[20];
fscanf(stdin,"%s",scritta);
printf("%s",scritta);
ecco,mettiamo che,eseguito il programma si voglia scrivere:"-ciao sono io".
c'e' un modo per far sì che il carattere "-" non appaia?
grazie e ciao.
ecco qua:
char scritta[20];
fscanf(stdin,"%s",scritta);
printf("%s", ++scritta);
ricorda che scritta è un puntatore e punta al primo carattere dell'array, quindi per puntare al secondo basta semplicemente incrementarlo.
MaxGuevara
27-08-2005, 00:11
E,se io faccio strcat con due files:
il primo del tipo "ciao come va?"
e il secondo "-bene grazie".
come farei a togliere dal file finale il carattere "-"?
snippet di esempio ^^:
char str1[20]="bella";
char str2[20]="-zio";
strcat(str1,str2);
printf("%s",str1);
l'output sarebbe:
bella -zio
ora,e' possibile levare quell inestetismo di "-"?
Grazie
E,se io faccio strcat con due files:
il primo del tipo "ciao come va?"
e il secondo "-bene grazie".
come farei a togliere dal file finale il carattere "-"?
snippet di esempio ^^:
char str1[20]="bella";
char str2[20]="-zio";
strcat(str1,str2);
printf("%s",str1);
l'output sarebbe:
bella -zio
ora,e' possibile levare quell inestetismo di "-"?
Grazie
All'una di notte opererei appoggiandomi ad una seconda stringa.
int i = 0;
char *stringaA[20];
char *stringaB[20];
sprintf(stringaA, "Bella -zio");
for ( x=0; x<=20;x++)
if (stringaA[x] != '-')
{
stringaB[i]=stringaA[x];
i++;
}
stringaB conterrà alla fine "Bella zio"
VegetaSSJ5
27-08-2005, 03:12
E,se io faccio strcat con due files:
il primo del tipo "ciao come va?"
e il secondo "-bene grazie".
come farei a togliere dal file finale il carattere "-"?
snippet di esempio ^^:
char str1[20]="bella";
char str2[20]="-zio";
strcat(str1,str2);
printf("%s",str1);
l'output sarebbe:
bella -zio
ora,e' possibile levare quell inestetismo di "-"?
Grazie
ma allora io cosa ho postato a fare prima? è esattamente la stessa cosa:
char str1[20]="bella";
char str2[20]="-zio";
strcat(str1, ++str2);
printf("%s",str1);
ma lui chiedeva come toglierla dalla stringa finita cioè direttamente da "bella -zio", almeno io questo ho capito.
cdimauro
27-08-2005, 20:16
Più semplicemente
printf("%s",&scritta[1]);
Sì, ma occhio ai buffer overflow: se la stringa è vuota, sono guai... :p
ecco qua:
char scritta[20];
fscanf(stdin,"%s",scritta);
printf("%s", ++scritta);
ricorda che scritta è un puntatore e punta al primo carattere dell'array, quindi per puntare al secondo basta semplicemente incrementarlo.
Ma cosi' pero' c'e' side-effect sul valore di scritta (cioe' l'indirizzo), o no? In generale non e' una buona cosa, imho. :confused:
VegetaSSJ5
27-08-2005, 21:36
Ma cosi' pero' c'e' side-effect sul valore di scritta (cioe' l'indirizzo), o no? In generale non e' una buona cosa, imho. :confused:
infatti io non scriverei mai una cosa del genere in un programma. questo è solo per fare un esempio... ;)
ecco qua:
char scritta[20];
fscanf(stdin,"%s",scritta);
printf("%s", ++scritta);
ricorda che scritta è un puntatore e punta al primo carattere dell'array, quindi per puntare al secondo basta semplicemente incrementarlo.
Questo è un errore, non puoi incrementarlo...è il riferimento all'inizio di un vettore...
Questo puoi farlo:
char scritta[20];
char *scrittab = scritta;
fscanf(stdin,"%s",scritta);
printf("%s", ++scrittab);
BlueDragon
28-08-2005, 23:54
Questo è un errore, non puoi incrementarlo...è il riferimento all'inizio di un vettore...
Questo puoi farlo:
char scritta[20];
char *scrittab = scritta;
fscanf(stdin,"%s",scritta);
printf("%s", ++scrittab);
Dopo questo ultimo post, non resisto ed aggiungo anche io un altro modo per farlo... :p
char scritta[20];
fscanf(stdin,"%s",scritta);
printf("%s", scritta+1);
Così non usi variabili d'appoggio e non sposti il vettore..:)
Così non usi variabili d'appoggio e non sposti il vettore..:)
Certo...non volevo risolvere il problema, ma volevo spiegare perchè non andava bene...
BlueDragon
29-08-2005, 20:24
Certo...non volevo risolvere il problema, ma volevo spiegare perchè non andava bene...
Oh beh, io ho postato solo perché non resistevo a proporre un'ulteriore soluzione..le mille notazioni del C e l'aritmetica dei puntatori mi divertono troppo :)
VegetaSSJ5
29-08-2005, 20:45
Questo è un errore, non puoi incrementarlo...è il riferimento all'inizio di un vettore...
Questo puoi farlo:
char scritta[20];
char *scrittab = scritta;
fscanf(stdin,"%s",scritta);
printf("%s", ++scrittab);
scusa cionci ho fatto un errore abbastanza madornale. :ave:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.