PDA

Visualizza la versione completa : [C] Semplice funzione su stringhe in C


kratos84
22-11-2007, 19:08
ciao ragazzi, vi chiedo gentilmente di aiutarmi. ho da fare una funzione in C che accetti in input una stringa ed un carattere e che ci restituisca in output una copia della stringa che invece degli spazi contenga il carattere immesso. ad Esempio,se io immetto (laboratorio di linguaggi , "_")--> questo mi si dovrà trasformare in laboratorio_di_linguaggi.
lo so che è semplice, ma io mi sono bloccato. cerco disperatamente aiuto. grazie!

oregon
22-11-2007, 19:14
Cosa hai scritto ? Non rispondere che non hai fatto nulla ...

kratos84
22-11-2007, 19:20
forse non ci crederai, ma ho come un blocco mentale, l unica cosa che forse credo sia esatta è il prototipo della funzione, anke se sono in dubbio anke su quello. cioè, io ho scritto:

char* rimpiazza(char *stringa, char c);


ora non so come procedere, mi serve un input che mi faccia sbloccare.
se mi aiuti x favore te ne sono grato.

oregon
22-11-2007, 19:24
Il prototipo puo' andare bene ...

Fai uno sforzo ... inizia a scrivere un ciclo che esamini la stringa dal primo carattere all'ultimo che, come saprai, e' NULL.

Ad ogni carattere puoi accedere con una variabile indice che parte dal valore 0 e va avanti ... ogni carattere della stringa puo' essere confrontato con lo spazio e se e' uguale, deve essere cambiato con il valore del carattere passato come secondo argomento.

Alla fine, restituisci lo stesso puntatore passato negli argomenti.

kratos84
22-11-2007, 19:29
potrebbe andare bene così?

char* rimpiazza(char *stringa, char c)
{
int i;
char *q;
stringa=(char *)malloc(1*sizeof(char));

for(i=0; stringa[i]!= '\0'; i++)
{
if(stringa[i]==' ')
stringa[i]==c;
}
q=stringa;
return q;
}

oregon
22-11-2007, 19:38
Non sei lontano ... c'e' qualche aggiustamento da fare ...

L'esercizio parla di funzione che "accetta" in input una stringa (tramite il puntatore) e questo significa che la stringa "esiste gia'" e che non deve essere allocata con la malloc ...

kratos84
22-11-2007, 19:46
quindi la funzione così vabene?:

char* rimpiazza(char *stringa, char c)

{
int i;
char *q;

for(i=0; stringa[i]!='\0'; i++)
{
if(stringa[i]==' ')
stringa[i]==c;
}
q=stringa;
return q;
}


e se volessi fare una prova?
io ho scritto questo codice,a ma non mi funziona xkè sbaglio da qualche parte:


int main()
{
char S1[]="reto iu iu";
char t;
char *s2;
char *s3;

s2=S1;

t='_';

s3=rimpiazza(s2, t);

printf ("%s\n", s3);

system("PAUSE");
return 0;

}

oregon
22-11-2007, 20:22
C'eri quasi ... il tuo errore piu' grave e' stato nella riga

stringa[i]==c;

che deve essere

stringa[i]=c;

Guarda il codice un po' piu' "pulito" ...



char *rimpiazza(char *stringa, char c)
{
int i;

for(i=0; stringa[i]!='\0'; i++)
if(stringa[i]==' ')
stringa[i]=c;

return stringa;
}

int main()
{
char S1[]="reto iu iu";
char *p, t;

t = '_';
p=S1;
p=rimpiazza(p, t);

printf ("%s\n", p);

system("PAUSE");
return 0;
}


... vedi che non era difficile?

kratos84
22-11-2007, 20:26
AH grazie, adesso funziona. cmq se ho bisogno di altri consigli ti posso contattare?
grazie ankora.

oregon
22-11-2007, 20:30
Tu posta sul forum ... molto probabilmente, ti rispondo ...

Loading