PDA

View Full Version : [c] inserire spazi in una stringa


dnarod
16-06-2006, 17:09
mi sapete dire come posso inserire un carattere ' ' in una stringa? cioe
char* s = "tantisaluti";

farlo diventare "tanti saluti"

?

71104
16-06-2006, 17:38
EDIT: cazzata :D

dunque, no: il C non prevede nessuna maniera standardizzata e quindi corretta e portabile di modificare un const char*

ciò che puoi fare è allocare un buffer in memoria dinamica, ricopiarci quella stringa, e quando ne hai bisogno metti lo spazio alla posizione giusta non prima di aver scalato di uno i caratteri successivi (compreso il terminatore NULL)

dnarod
16-06-2006, 17:48
sto sclerando anche solo per trasformare l espressione che mi serve in una che sia un attimo piu lavorabile...non oso nemmeno pensare alla costruzione dell albero sintattico dell espressione da calcolare (mi hanno obbligato a farlo ricorsivamente)...
[considerazione assolutamente personale]: il c rullera anche, ma se per farlo rullare devo spostare a mano i bit con una manovella, sinceramente preferisco i linguaggi di piu alto livello...

71104
16-06-2006, 17:56
no vabbè, lascia perdere l'inserzione degli spazi, ti consiglio di lavorare sulla stringa originale; vedila come un automa a stati finiti, è su quello che devi lavorare ;)
tutto quello che devi fare è un mega-looppone con una variabile che ne indica lo stato, cioè che indica se il parser è in attesa di un separatore, di un operatore binario, di un operatore unario, di un operando, delle parentesi, di una variabile...

dnarod
16-06-2006, 18:21
ehehe ti ringrazio per il consiglio, ma l avevo gia detto, il corso è basilare, la direttiva è che lo devo fare con scanf, inserendo in un albero con ricorsione e calcolando il risultato con uno stack...prima di un anno dal corso che sto affrontando non si faranno gli automi...

visto che tanto la lettura delle espressioni si faceva da file, ho fatto che appoggiarmi a un file temporaneo nel quale inserisco gli spazi...quindi "3-4" diventa "3 - 4"....poi pesco da quel file e costruisco la forma postfissa e altrettanto semplicemente calcolo con un altra passata nello stack...vediamo se funziona al primo colpo e sopratutto se me l accettano senza alberi (ma sinceramente a quello non ci arrivero mai...ho scritto 5 o 6 fogli di prove, tutte senza nemmeno capire che stavo facendo)

dnarod
17-06-2006, 00:48
alla fine ho prodotto qualcosa di funzionante, ma a modo mio e mi sa che non l accettano:
-prendo la stringa e inserisco uno spazio (piuttosto che un qualsiasi carattere diverso dalle operazioni o numeri 0-9) fra ogni operando e operatore
-converto in postfisso facilmente con uno stack
-calcolo ancor piu facilmente con uno stack

giusto, meno sbattone, l unica cosa che mi lascia :| è il fatto che in c non abbia trovato un modo per lavorare con le stringhe ma mi sia dovuto apoggiare a un file per mettere i ' ' che mi servivano e poi leggere le righe (per avere la stringa corrispondente)...davvero una soluzione poco elegante...ora pero non potra dire che la buona volonta non c e l ho messa, quindi mi dovra dare almeno un microsuggerimento per come risolvere la creazione dell albero ricorsivamente...