Pagina 1 di 1

Stringhe in C

MessaggioInviato: mar apr 03, 2007 12:58 pm
da exelent
Ciao ragazzi ho un problemino,
devo fare un programma in C ma non ci capisco un granché, potreste darmi una mano? [:-H]

Il programma deve, una volta inserita una frase, visualizzarla sulla shell con le parole nello stesso ordine, ma con le lettere invertite:

esempio QUESTA E' UNA LINEA DI INPUT
ATSUEQ 'E ANU AENIL ID TUPNI

e poi scriva anche la frase con le parole in ordine opposto
INPUT DI LINEA UNA E' QUESTA

Non chiedetemi a cosa possa mai servire ma me l'hanno chiesto e lo devo fare!! [boh]

Lauta ricompensa di birra, o donne o champagne, scegliete voi! [:D] [8D]

MessaggioInviato: mar apr 03, 2007 1:09 pm
da Xerex
L'idea è che con un ciclo scorri la stringa...nel frattempo conti il numero di caratteri che la compongono.
Poi, con un'altro ciclo, stampi a schermo un carattere alla volta a partire dall'ultimo.Per posizionarti userai sizeof(char)

MessaggioInviato: mar apr 03, 2007 6:39 pm
da Silver Black
Poichè in C/C++, così come in JAVA e Pascal, la stringa non è altro che un vettore di char, puoi scorrerla dal fondo all'inizio, con un banale ciclo for che parte dalla sua lunghezza - 1 (il carattere n contiene in realtà il terminatore \n), fino al primo carattere (stringa[0]). Contemporaneamente stamperai i caratteri via letti, eventualmente concatenandoli in un'altra stringa e stampando questa a video in una volta sola.

Ecco il codice, che oltretutto modifica la stringa iniziale nella stessa stringa ma invertita, per questo fa uso di 2 variabili di ausilio:

Codice: Seleziona tutto
void reverse(char s[]);

main()
{
  char text[80]="QUESTA E' UNA LINEA DI INPUT";

  printf("string is %s\n", text);
  reverse(text);
  printf("string is %s\n", text);
}

void reverse(char s[])
{
  int c, i, j;
   
  for (i=0, j=strlen(s)-1; i < j;i++, j--)
  {
    c = s[i];
    s[i] = s [j];
    s[j] = c;
  }
}



Tutto qui! [std]

P.S.: spero che il mio C non sia arrugginito del tutto.

MessaggioInviato: mar apr 03, 2007 7:37 pm
da Ices_Eyes
Silver Black ha scritto:P.S.: spero che il mio C non sia arrugginito del tutto.

No, sta volta pare sia giusto, te lo dice il tutor di lab. prog., per cui persona notoriamente poco attendibile [:D]

Però vi siete dimenticati la parte in cui deve scrivere le parole in ugual ordine ma inverse... [bleh]

MessaggioInviato: mar apr 03, 2007 10:05 pm
da M@ttia
Vedendolo così mi sembra manchi una &, perché la void reverse deve cambiare l'argomento che gli dai come input, quindi dovresti chiamarlo "by reference", quindi void reverse( &char s); , altrimenti alla fine di void la nuova s "muore" e la tua s di prima non è mai stata toccata...

MessaggioInviato: mer apr 04, 2007 12:20 am
da Ices_Eyes
M@ttia ha scritto:Vedendolo così mi sembra manchi una &, perché la void reverse deve cambiare l'argomento che gli dai come input, quindi dovresti chiamarlo "by reference", quindi void reverse( &char s); , altrimenti alla fine di void la nuova s "muore" e la tua s di prima non è mai stata toccata...

No, è un vettore, viene passato by reference per default [:)]

MessaggioInviato: mer apr 04, 2007 12:22 am
da M@ttia
Ices_Eyes ha scritto:
M@ttia ha scritto:Vedendolo così mi sembra manchi una &, perché la void reverse deve cambiare l'argomento che gli dai come input, quindi dovresti chiamarlo "by reference", quindi void reverse( &char s); , altrimenti alla fine di void la nuova s "muore" e la tua s di prima non è mai stata toccata...

No, è un vettore, viene passato by reference per default [:)]
Se mi dici questo (che ammetto di non sapere), allora autoritiro tutto quello detto sopra! [^] (e grazie che mi hai insegnato questa regola implicita che non conoscevo).

MessaggioInviato: mer apr 04, 2007 12:44 am
da exelent
Grazie ragazzi, funziona bene!!
Però vorrei approfittare ancora un po' della vostra cortesia e chiedervi ancora qualcosina.
Il programma dovrebbe invertire nei 2 (anche il secondo è molto importante) modi che vi ho scritto una frase che l'utente digita in quel momento e non una già impostata.. Scusatemi ma non ci capisco davvero niente!!! [cry+] [:-H]

Poi, e con questo spero di lasciarvi a cose ben più serie, quando scrivo un programma per far prendere al compilatore uno spazio cosa gli scrivo?
Mi spiego:
scrivo la parola "ciao " (con lo spazio dopo la o)
gli chiedo di mostrarmi in che posto è la lettera "i" e mi dice giustamente 1 (dovrebbe partire a contare dallo zero)
ma come faccio a chiedergli di dirmi dove si trova lo spazio?

Ammetto di essere stato un po' prolisso, ma spero mi aiuterete lo stesso.