PDA

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.

sari
26-08-2005, 18:06
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.

sari
26-08-2005, 19:38
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

sari
27-08-2005, 00:26
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);

sari
27-08-2005, 11:19
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

Gica78R
27-08-2005, 21:07
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... ;)

cionci
28-08-2005, 23:33
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..:)

cionci
29-08-2005, 00:03
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: