Newsgroup: it.comp.lang.c
Titolo: Sostituzione di caratteri.

Salve.
Supponendo di avere una stringa di questo tipo "abcd'", con
l'apostrofo, memorizzata nell'array arr[6].
Come posso fare se volessi verificare l'esistenza
dell'apostrofo nella stringa e, nel caso lo trovassi,
sostituirlo con il doppio apostrofo "''"?
mi e' sembrato di capire che strstr(..,..) potrebbe fare al caso
mio ma non ne cavo piede.
-- 
per rispondere togli <toglimi> dall'indirizzo di posta. 

 wrote in message
82k3nk$g8n$1...@pegasus.tiscalinet.it...


}
Perfetto, l'ho capito.
Pero'. colpa mia che non l'ho specificato,  non devo mettere i doppi
apici al posto del singolo, ma due singoli, cioe' al posto di " ' "
ci devo mettere " '' ".
Praticamente devo spostare di una posizione, carattere per carattere,
il contenuto dell'array per far posto al singolo apice da aggiungere.


    s1[i]='"';        // idem come sopra '   "   '
            ^ non credo sia questo che l'autore del msg originale
voglia fare, quanto invece trasformare '\'' in "\'\'" e per fare
questo conviene riscrivere la stringa :
#include <stdio.h>
main()
{
    char src[] = "Questo e' un esempio, funzionera' ?" ;
    char dst[50] ;
    int i, j ;
    for (i = 0, j = 0 ; src[i] ; i++, j++ ) 
    {
        if ( src[i] == '\'' )
        {
           dst[j++] = '\'' ;
        }
        dst[j] = src[i] ;
    }
    dst[j] = '\0' ;
}   
--
Andrea Laforgia
andrea_...@bigfoot.com

 sostituirlo con il doppio apostrofo "''"?
Puoi usare strchr() per trovare l'apostrofo pero', per sostituirlo
con *due* caratteri, devi fornire lo spazio per il nuovo carattere
che vuoi inserire.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 sostituirlo con il doppio apostrofo "''"?
Prova con (non l'ho provato)
pos = strchr( tuaStringa, '\'' );
if ( pos ) tuaStringa[ pos ] = '"';
Tieni presente che trova e sostituisce solamente la prima occorrenza.
EMG

E hai ragione, visto il msg sopra! con tutti 'sti trattini vicini mi sono
perso!
Ciao
Marco


 il contenuto dell'array per far posto al singolo apice da aggiungere.
Allora avevo intuito bene, solo che ho preferito far finta di niente.
:-) In questo caso la cosa è un po' più complicata e richiede:
1. L'allocazione di un array più capiente.
2. La copia dei caratteri dal vecchio al nuovo aggiungendo l'apice in
più quando necessario.
EMG

}   
Perfetto. 
Scusa la mia ignoranza, (tempo decisi di iniziare a studiare il
C poi ho dovuto metterlo da parte ed ora mi ritrovo ancora all'abc),
non ho capito la condizione src[i] nel for.
Cioe', inizializza le due variabili i e j, ok, ma src[i] cosa vuol dire?
Se posso ti sottopongo la mia soluzione, forse e' un po' troppo 
macchinosa:
while (Rec->cognome[fineCognome] != '\0')
    fineCognome++;
while (Rec->cognome[cognome] != '\0'){
    if (Rec->cognome[cognome] == '\''){
      Rec->cognome[fineCognome] = ' ';
      Rec->cognome[fineCognome++] = '\0';
      for (i = fineCognome - 1; i > cognome; i--)
         Rec->cognome[i] = Rec->cognome[i - 1];
      Rec->cognome[cognome] = '\'';
      cognome++;
    }
    cognome++;
}
 
Ciao.


}
Con il tuo codice, non fai altro che spostare tutti i caratteri di un
posto, non so se sia la soluzione piu' efficiente, ma va bene...
--
Andrea Laforgia
andrea_...@bigfoot.com

e quindi '\0' equivale a 0.
Tutto molto chiaro, molto gentile, grazie.
