Newsgroup: it.comp.lang.c
Titolo: Invertire una stringa.

Ciao, scusate la domanda....sono uno studente Java ma un'amica di una mia
amica (!!!) mi ha chiesto di fargli un programma in C che accetti in input
una stringa di 10 caratteri e come output restituisca la stringa invertita.
Esiste una funzione di libreria o devo scrivere tutto il codice io?
Non vi chiedo se mi fate il programma voi ^_^ (lo fareste?) perchè mi sto
divertendo a farlo io, studiando proprio adesso le stringhe.
Mi basta questa informazione su tale funzione se esiste.
Ciao e grazie!!!

 una stringa di 10 caratteri e come output restituisca la stringa invertita.
<CODE>
#include <stdio.h>
void inverti (char *);
int main() {
	char stringa[10];
	printf ("Scrivi una stringa di 10 caratteri:\n");
	scanf ("%s", stringa);
	inverti (stringa);
	return 0;
}
void inverti (char *s) {
	if (s[0] == '\0')
		return;
	else {
		inverti (&s[1]);
		putchar (s[0]);
	}
}
</CODE>
-- 
Marco

Mi basta questa informazione su tale funzione se esiste.
Non esiste, visto che si può realizzare con un banale ciclo for, e che
comunque non è una funzione granché utile... :-).
Usa la strlen per leggere la lunghezza della stringa da invertire, poi
prendi il valore della strlen e parti con un for a ritroso
for(i = strlen(stringa) - 1; i >= 0; i--)
e ricopia carattere per carattere il vettore originale in un'altro.

Grazie per le risposte. Ho fatto tutto da solo ehehehe con la buona volontà
si ottiene tutto.
Ecco il mio codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**********************************************
*Programma che accetta come input una stringa *
*e genera come output una stringa invertita   *
**********************************************/
char stringa[10];
size_t lunghezza;
int inverti( char *stringa);
int main(){
    char destinazione[10];
    puts("Inserire una stringa di 10 caratteri massimo.\n");
    while(strlen(stringa)!=10){
       puts("Finche' non inserirai una stringa lunga esattamente");
       puts("10 caratteri il programma ti richiedera' l'input.\n");
       gets(stringa);
    }
    printf("E' stata inserita la seguente stringa: %s\n", stringa);
    lunghezza=strlen(stringa);
    /*destinazione=(char*)malloc(strlen(stringa)+1);*/
    strcpy(destinazione, stringa);
    printf("La stringa %s e' lunga %u caratteri\n",stringa, lunghezza);
    printf("La stringa %s, di %u caratteri, da luogo a %s se
invertita\n",destinazione, lunghezza, inverti(stringa));
    system("PAUSE");
    return 0;
}
int inverti(char *stringa){
    return strrev(stringa);
}
Mi sono messo di buona lena a studiare le stringhe e in mezz'oretta ecco qui
questo bel codice!
Sono stato bravo?
Per le donne questo ed altro ^__^
Grazie a tutti cmq!

void reverse(char *s)
{
     int a, b, m, len = strlen(s);
     m = len / 2;
     a = 0;
     b = len - 1;
     for (; a < m; a++, b--)
     {
         char t = s[a];
         s[a] = s[b];
         s[b] = t;
     }
}
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

Sono stato bravo?
No, strrev() non e' standard.


 No, strrev() non e' standard.
Chiedo venia........ma in che senso non è standard?

 }
Posso modificare questo codice cosě?
int reverse(char *s)
{
     int a, b, m, len = strlen(s);
     m = len / 2;
     a = 0;
     b = len - 1;
      for (; a < m; a++, b--)
    {
         char t = s[a];
          s[a] = s[b];
          s[b] = t;
      }
    return *s;
 }

 ha scritto nel messaggio
news:9hna8uot606463upl...@4ax.com...

Eheheheh.....è banale davvero. Invero ci sono tanti modi per farlo...ma ste
pore ragazze.....aiutamole no? ^_^
Ciao.



char* reverse(char* s)
{char * p=s, *p1, *p2, c;
 if(*p=='\0' || p==NULL) return s;
 while(*++p);
 for(p1=s, p2=--p; p1 < p2 ; p1++ , p2--)
               {c=*p1; *p1=*p2; *p2=c;}
 return s;
}

  }
Si può fare, anche se non capisco per quale motivo.
Ciao,
Cecco

 Cecco
Perchč il prototipo dell'esercizio che mi ha dato la ragazza era int
inverti(char*)
quindi non di tipo void.
Grazie cmq.

 inverti(char*) quindi non di tipo void.
return 0;
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Chiedo venia........ma in che senso non è standard?
Non e' supportata dallo standard ISO del linguaggio.


  }
Occhio, qui secondo me c'e' una grossa incomprensione del tipo di 
ritorno di una funzione, una mancanza delle specifiche della funzione, o 
un errore di scrittura
perche' ritorni un puntatore alla stringa, castandolo (implicitamente) a 
int?
piu' senso avrebbe ritornare 0 se la stringa e' vuota o c'e' stato un 
errore, o len, se e' andato tutto a posto
oppure devi modificare la definizione in 
char* reverse (char *s);

On Wed, 06 Mar 2002 08:13:13 GMT, j...@jk.jk (jk) wrote:
char* reverse(char* s)
{char * p=s, *p1, *p2, c;
 if(p==NULL || *p=='\0') return s;


Posso modificare questo codice così?
Che significato ha restituire il primo carattere dell'array?
Non ne capisco l'utilità. :-)

pore ragazze.....aiutamole no? ^_^
Cosa sana e giusta. ;-)
Avrei potuto postarti il codice direttamente, ma ho preferito evitare,
visto che avevi esplicitamente richiesto solo un suggerimento, per
realizzarlo da solo. :-)
Com'č andata con la ragazza? :-)

 Com'è andata con la ragazza? :-)
Quella che non mi piace sta in fissa con me, l'altra che mi piace da morire
dice che proprio non sono il suo tipo (me lo ha lasciato scritto nel doc che
abbiamo sul pc in comune del corso) nel senso che io sono un tipo non
sportivo, vesto classico.....e le sembro troppo furbetto.........mah.
Speriamo che vada tutto bene :)
Ciao.

 ha scritto nel messaggio
news:eq6d8ugh9sqmc1sa4...@4ax.com...

Mmmmm si infatti......ho fatto confusione...
Ma un prototipo tipo int inverti(char *stringa) vuole un valore INTERO di
ritorno e i caratteri sono memorizzati come interi....quindi return *stringa
restituisce un intero...però solo quello........
Uff.....^_^

dice che proprio non sono il suo tipo 
Onestamente, se fossi una donna, temo che nessuno sarebbe il
mio tipo se cercasse di conquistarmi a botte di funzioni
scritte in C...


restituisce un intero...però solo quello........
Hmmm... una mamma viene a prendere suo figlio all'asilo....
si presuppone che riceva un essere alto 1 metro e 20 che
respira e non si fa problemi nell'emanare odori sgradevoli
dalle parti posteriori del suo corpo.... gli restituisco uno
scimpanze'... tanto e' uguale...


scritte in C...
Beh...magari con una bella funzione tipo...
void c_stai(void)
8-)

8-)
bool c_stai()
{
    return false;


}
Tregua?

}
Giusto... la domanda prevede una risposta...
Meglio un imperativo! :-)
void stac(void) /* leggi 'stacci' */
{
}

 }
Come ti ha detto Andrea questa non e` standard, ed il tipo di ritorno
non e` quello che vorresti:
char *inverti(char *dest, char *src) {
	int i;
	int len = strlen(src);
	for (i = 0; i < len; i++)
		dest[i] = src[len - i - 1];
	dest[i] = '\0';
	return dest;
}
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se non sei parte della soluzione, allora sei parte del problema.

passarla a strlen. 
Nessun dolore.  
In questo caso specifico, il vettore e' inizializzato a
zero, come tutti gli oggetti globali:
#include <stdio.h>
char s[10];
void writestr(char* s)
{
     int i;
     for (i = 0; i < 10; i++)
        printf("[%3d]", s[i]);
     printf("\n");
}
int main(int argc, char* argv[])
{
    char t[10];
    printf("s = "); writestr(s);
    printf("t = "); writestr(t);
    getchar();
    return 0;


"Andrea Laforgia" ha scritto
:
: >> char stringa[10];
: >> size_t lunghezza;
: >>
: >> int inverti( char *stringa);
: >>
: >> int main(){
: >>    char destinazione[10];
: >>    puts("Inserire una stringa di 10 caratteri massimo.\n");
: >>    while(strlen(stringa)!=10){
: >
: >Prevedo dolori. stringa non e` inizializzata, contiene garbage. Non puoi
: >passarla a strlen.
:
: Nessun dolore.
: In questo caso specifico, il vettore e' inizializzato a
: zero, come tutti gli oggetti globali:
:
Allora qualche dolore potrebbe forse arrivare dal fatto che se
strlen(stringa)
deve essere == 10 stringa dovrebbe essere lunga almeno 11 caratteri.
ciao
Massimo

 zero, come tutti gli oggetti globali:
Vero, non l'avevo notato.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
La vispa candela bruciava l'erbetta
creando un'essenza alquanto sospetta;
sembrava l'odore di una sacrestia
ma presto mi accorsi che era maria.

 ha scritto nel messaggio
news:%dni8.10284$%d1.2...@twister2.libero.it...

Aho, si è vero, per via del \0 finale.........ma nel codice ho dovuto
scrivere proprio ==10..........Mah!