Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

Stringhe in C

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

Stringhe in C

Messaggioda exelent » mar apr 03, 2007 12:58 pm

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]
Avatar utente
exelent
Neo Iscritto
Neo Iscritto
 
Messaggi: 4
Iscritto il: mar apr 03, 2007 12:48 pm

Messaggioda Xerex » mar apr 03, 2007 1:09 pm

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)
Fare la grigliata, è sempre una figata!
Avatar utente
Xerex
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5948
Iscritto il: lun ago 05, 2002 9:36 am
Località: Parma(Pr)

Messaggioda Silver Black » mar apr 03, 2007 6:39 pm

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.
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia


Messaggioda Ices_Eyes » mar apr 03, 2007 7:37 pm

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]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda M@ttia » mar apr 03, 2007 10:05 pm

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...
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Messaggioda Ices_Eyes » mer apr 04, 2007 12:20 am

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 [:)]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda M@ttia » mer apr 04, 2007 12:22 am

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).
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Messaggioda exelent » mer apr 04, 2007 12:44 am

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.
Avatar utente
exelent
Neo Iscritto
Neo Iscritto
 
Messaggi: 4
Iscritto il: mar apr 03, 2007 12:48 pm


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising