Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Un po' di (in)utilità per stringhe in C
Forum - C/C++ - Un po' di (in)utilità per stringhe in C - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:56
Domenica, 21/05/2017
Scusate ma tampone al posto di buffer non si può leggere ... siamo seri... Va benissimo free_buffer

Ultima modifica effettuata da nessuno il 21/05/2017 alle 15:57


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 16:11
Domenica, 21/05/2017
...e se per "inglobare" l'annullamento del puntatore su una sola riga usassi questo?

Codice sorgente - presumibilmente C/C++

  1. #define LIBERA_TAMPONE(p) free(p); (p)=NULL



In questo caso non ci sarebbe doppia indirezione e neppure la creazione di una funzione che a quanto pare è superflua. Ora qualcuno mi dirà "sì, e come la metti col controllo del tipo?". Pignolo.

P.S. A me invece 'sta storia del tampone piace parecchio! E' ironicamente buffa, e un po' di leggerezza ci sta sempre bene. Essere dei buontamponi non implica necessariamente mancare di serietà. :heehee:


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 16:17
Domenica, 21/05/2017
Lumo, alla soluzione di una funzione ausiliaria che si prendesse cura di tutte le funzioni di inserimento e sostituzione ci avevo effettivamente pensato. Il problema che non sono riuscito ad aggirare riguarda le dimensioni dell'allocazione, da conoscere preventivamente: per conoscere quelle dimensioni occorrerebbe comunque scorrere le stringhe in input, quindi il vantaggio andrebbe perso. Per procedere invece senza precalcolare quelle dimensioni si finirebbe in un dedalo di allocazioni, deallocazioni e copiature che, penso, sarebbero insensate e "perditempo".

===

Le cosiddette "stringhe Pascal" erano usatissime nel System fino al 9 di Apple, con la limitazione (ovvia) di avere una lunghezza massima di 255 caratteri. Apple, per avere 255 caratteri a disposizione, impiegava stringhe di unsigned char. Ti dirò, entro quel limite erano pure comode!
Pensi che sarebbe agevole replicare un modello simile utilizzando, che so, i primi 4 byte della stringa come fossero un valore size_t? (permetterebbe stringhe di lunghezza oltre il limite dell'utilizzabile... penso ai classici 0xFFFFFFFF caratteri: una stringa invero lunghetta.) In definitiva si tratterebbe di qualche casting e di una lettura con un offset fisso rispetto al puntatore... a quel punto, però, usare le funzioni standard che implicano modifiche dirette della stringa sarebbe quanto mai macchinoso, visto che il valore della lunghezza andrebbe ogni volta aggiornato.
Il discorso non cambierebbe un gran che se invece si usasse una struttura dati comprendente un size_t e il puntatore vero e proprio. Forse sarebbe solo un po' più lineare.

Ultima modifica effettuata da AldoBaldo il 21/05/2017 alle 16:27


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:31
Domenica, 21/05/2017
Esiste STD::string che fa una cosa simile. Non sento la necessità di riproporlo in c.

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 17:41
Domenica, 21/05/2017
In effetti STD::string fa MOLTO di più (e, voglio sperare, molto meglio). Del resto, basta pensare a chi è che mette le mani su una cosa come STD::string e chi è che mette le mani sul codice da autodidatta amatoriale che vi propongo di quando in quando. Non pretendo certo di sostituirmi a un mostro sacro come STL et similia!!!

Vedila così: ci sono un sacco di dilettanti che fanno musica orecchiabile e godibile... e c'è Igor Stravinsky con la sua Sagra della primavera. Stravinsky non dovrebbe escludere gli altri, perché sono su piani completamente diversi, con finalità diverse.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 18:16
Domenica, 21/05/2017
Testo quotato

Postato originariamente da AldoBaldo:
...



Il discorso delle maiuscole\minuscole
Le versioni che avevo fatto erano solo per il codice ASCII, avevo usato toupper() e tolower(), quindi dove andavano bene loro andavano bene pure le mie.

Per le lettere accentate, seguendo sempre la tabella ASCII Estesa, le convertivo nei corispondenti senza accento.

Mascherare la frase, si XD l'avevo fatta per il gioco dell'impiccato, ma può essere vista come un caso particolare della tua
Codice sorgente - presumibilmente C++

  1. char *sostituisci_caratteri(     const char *str, const char *orig, const char *sost );



Sostituisce tutti i caratteri con uno scelto. Utile? dipende il programma che serve creare. Sicuramente la meno utile del mucchio.

Giustamente, per la funzione delle doppie, è più logico farlo con un carattere a scelta (avevo scritto spazi ma in generale ho sempre cercato di fare le funzioni più generiche che potevo,P.S. la funzione conviene reiterativa, in modo da cancellare anche sequenze di 3 o più caratteri uguali)
Avevo anche tentato di scrivere una funzione che convertisse i TAB in 4 spazi, ma c'era il problema che si verebbero a creare 3 caratteri in più, quindi la stringa dovrebbe essere "aumentata"


Testo quotato

Postato originariamente da TheDarkJuster:

Esiste STD::string che fa una cosa simile. Non sento la necessità di riproporlo in c.



Nulla da ridire, ma per chi usa il C?
E' veramente "lavoro e tempo perso" cercare di ricreare qualcosa di simile?
e' una domanda tecnica.
A tuo avviso, dovendo usare il linguaggio C, il gioco vale la candela?
Fermo restando che ci sia la possibilità di usare STD::string nel linguaggio C, cosa che sconosco.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:56
Domenica, 21/05/2017
Si può riproporre STD::string come struttura. In questo modo puoi manipolare la stringa con le funzioni standard e per quelle speciali avvantaggiarti della struttura.

A mio avviso avere una cosa simile a STD::string in c dipende dall'uso che se ne fa delle stringhe. Per un programma in un microcontrollore è controproducente, in qualche programma PC può avere senso se le stringhe sono molto ampie

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:34
Martedì, 23/05/2017
Testo quotato

Postato originariamente da AldoBaldo:

P.S. A me invece 'sta storia del tampone piace parecchio! E' ironicamente buffa, e un po' di leggerezza ci sta sempre bene. Essere dei buontamponi non implica necessariamente mancare di serietà. :heehee:



Aldo ... a te può stare bene ma nessuno, neanche i buontemponi, userà questa libreria con le funzioni che si chiamano libera_tampone ...

Poveri noi ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo