Newsgroup: it.comp.lang.c
Titolo: Rimuovere caratteri tabulazione

 
 
 
Con un programma scritto con Mingw, leggo dalla clipboard di Windows, una
stringa di testo. La stringa puņ contenére dei carątteri come, \n \r \t.
 
Mi sapéte dire se esiste una funzione del C, che permétte di rimuņvere
questi caratteri?
 
 
Grązie
 
 
 
 
 
 

 Grazie
 
Non tra le funzioni della libreria standard. Tuttavia un'implementazione funzionante da scrivere è abbastanza banale.
Ciao!

 Grazie
 
Non tra le funzioni della libreria standard. Tuttavia un'implementazione 
funzionante da scrivere è abbastanza banale.
Ciao!
 
mi dai in input? :-)
 
Ciao 
 
 


 
sarà una cosa del tipo
 
for( int ic = 0 ; str[ic] != '\0 ; ic++ )
{
   if(  str[ic] == '\t' /* eccetera */  )
     str[ic] = ' ' ;
}
 
a parte qualche dettaglietto e che si può scrivere meglio.
Ma se il problema non è questo, cosa non ho capito?
 
-- 
"Tesoro, ora che sto per morire devo confessarti
che ti ho tradita con la tua migliore amica"
"Non agitarti amore, lascia che il veleno faccia
il suo effetto"
 

 
 
ok, ti ringràzio
 
Ciao
 
 
"Archaeopteryx" <cor.bonukFANCULOSPAM@libero_NOMAIL_.it> ha scritto nel 
messaggio news:4fa985f7$0$1388$4faf...@reader1.news.tin.it...


 Ma se il problema non è questo, cosa non ho capito?
 
Non sentite puzza di tróll?


boh, perché? Se è un troll è il peggiore mai visto ;)
Ciao!

 Ma se il problema non è questo, cosa non ho capito?
 
Però forse l'OP con "rimuovere" intendeva proprio cancellazione
del carattere e non sostituzione con uno spazio. In questo caso,
l'algoritmo sarebbe più complicato.
 
 

 l'algoritmo sarebbe più complicato.
 
intendevo proprio questo :-)
 
Ciao
 
 
 


Più o meno è uguale...
 
char *nb;
int i, j;
nb = malloc(strlen(str)+1);
for (i=j=0; i<strlen(str)+1; ++i)
    if (str[i]!='\n' ... )
        nb[j++] = str[i];
 
Ciao!


 
vero... hai perfettamente ragione
 


 
Allora magari una cosa così:
 
char *d = str;
for (char *s = str; *s; s++)
     if(*s != '\t')
         *(d++) = *s;
*d = 0;
 
-- 
r--r--r--

 *d = 0;
 
Secondo me gli state facendo i compiti. Esercizi di questo tipo sono
proprio quello. Un progetto largo non lo affronti se non riesci a fare
manco questo: di conseguenza non si sta dando aiuto su un problema
reale. Se ti interessa imparare, cominci postando un'implementazione
magari claudicante e poi dopo nel ng la cosa viene aggiustata. I post in
questa forma sono proprio "fammi i compiti".
 
-- 
-riko
http://www.enrico-franchi.org/
 
http://rik0-techtemple.blogspot.com/
 

 
 
Sinceramente lo spero: il fatto che qualcuno abbia questo come "compito a casa" significherebbe che in Italia da qualche parte qualcuno insegna il C a scuola. :-/
Ciao!

 proprio quello. Un progetto largo non lo affronti se non riesci a fare
 
Uh! Probabile! Ma per come la vedo io ci sono due possibilità: è in 
buona fede e voleva solo una soluzione al suo problema, stava davvero 
facendo i compiti e non ne aveva voglia.
 
Nel primo caso gli è stata data una mano. Nel secondo caso adesso ha una 
soluzione non commentata ed incompleta, che senza sbattersi non sarà in 
grado né di completare né di spiegare. Se non tenterà di capirla resterà 
una capra, ma a questo punto è un problema suo...
 

 C a scuola. :-/
 
Noi lo facciamo. E' C++ in effetti, ma un esercizio di questo tipo
potremmo averlo dato. Anzi...  l'esercizio "rimuovi ogni occorrenza di
ogni elemento dell'array X dall'array A" e' un classicissimo. E di
fatto, questa e' una variazione sul tema.


Solo per proporre una versione 'strana':
 
char *RimuoviOccorrenze(char *from,char *checosa){
  char *scan,*res;
  int len;
  res=strtok(from,checosa);
  scan=from+strlen(res);
  while(res=strtok(NULL,checosa)){
    len=strlen(res);
    strcpy(scan,res);
    scan+=len;
  }
  return from;
}
 
Ciao a tutti,
Andrea
-- 
andrea - ar italy, com

Scusate, avevo scritto "di getto" e ho dimenticato che una stringa
potrebbe iniziare gia` con una occorrrenza da rimuovere:
 
char *RimuoviOccorrenze(char *from,char *checosa){
  char *start,*scan,*res;
  int len;
  start=res=strtok(from,checosa);
  scan=start+strlen(res);
  while(res=strtok(NULL,checosa)){
    len=strlen(res);
    strcpy(scan,res);
    scan+=len;
  }
  return start;
