Newsgroup: it.comp.lang.c
Titolo: AIUTO VIRGOLA INVECE DI PUNTO

Ciao a tutti
sto leggendo un semplice file dove c'è una colonna di numeri, solo che ogni
tanto c'è qualche decimale con la virgola invece del punto.. come faccio a
leggerlo? Ho pensato che prima mi scansiono tutto il file togliendo la
virgola e mettendo il punto, ma non ho trovato una qualche funzione semplice
tipo replace che se c'è all'interno di una stringa una virgola la
sostituisce con il punto? come fare'?
grazie!!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 come fare'?
char *strreplace(char *str, char ch1, char ch2)
{
  for(char *ptr = strchr(str, ch1) ; ptr ; *ptr = ch2)
  return str ;
}
int main()
{
  printf(strreplace("123,45", ',', '.')) ;
}

 sostituisce con il punto? come fare'?
void strreplace(char *s, char from, char to) {
   for(;*s;s++)
     if (*s==from)
       *s=to;
}

Ciao, grazie per la veloce riposta, ma ricevo questo errore con gcc:
process.c: In function ‘strreplace’:
process.c:13: error: ‘for’ loop initial declaration used outside C99 mode
in cosa sto sbagliando??
Grazie ancora

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 in cosa sto sbagliando??
Nel C99 non puoi dichiarare le variabili all'interno del for.
E.

 Nel C99 non puoi dichiarare le variabili all'interno del for.
per il C99 puoi
ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 Nel C99 non puoi dichiarare le variabili all'interno del for.
No, in C99 puoi, in C89 no. Infatti l'erroe che gli da č:
error: 'for' loop initial declaration **used outside C99 mode**
Per bingobongo:
Vedi se il tuo compilatore supporta in C99 e come abilitarlo, altrimenti 
usa questo codice qui:
char *strreplace(char *str, char ch1, char ch2)
{
  char *ptr ;
  for(ptr = strchr(str, ch1) ; ptr ; *ptr = ch2)
  return str ;
}
Oppure quello di manu, che č migliore del mio :)
-- 
Camillo, di BG, RS125 in risanamento

camillo ha scritto:

e' sbagliato, riguardalo.


 
e' ancora sbagliato


A me lo compila senza errori ma quando gira non funziona.. e l'altro codice
di manu invece va tutto ok

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 e' ancora sbagliato
bisogna mettere un ; alla fine del for.
E.

?manu* ha scritto:

no, e' ancora sbagliato


Ci provo io?
size_t
strreplace(char *str, int oldc, int newc)
{
        size_t n;
        for (n = 0; (str = strchr(str, oldc)) && *str; *str = newc, n
+= 1);
        return n;
}

 e' sbagliato, riguardalo.
regola numero uno: mai postare codice di notte e senza provarlo.
me lo segno, sorry -.-

"camillo" <c.b@g.c> ha scritto nel messaggio
news:VAtoj.235089$%k.36...@twister2.libero.it...

Solo alcune note in aggiunta a quanto già detto da
altri sul codice della funzione:
(1) definire funzioni che iniziano con str + "lowercase" è problematico
a causa delle estensioni future della libreria;
(2) non è lecito modificare "123,45";
(3) aggiungi gli opportuni include file;
(4) in generale è meglio usare espressamente il formato "%s" + stringa da
stampare
(con aggiunta di \n magari ...).
...
--
Giorgio Silvestri
DSP/Embedded/Real Time OS   Software Engineer

fnegroni ha scritto:

gia' meglio: cosi' inizia a funzionare...
Pero' ti vorrei fare notare questi punti:
*) a cosa serve "&& *str" nella condizione del ciclo for?
*) attenzione che se oldc == newc la funzione va in loop infinito
*) i parametri passati alla funzione non vengono controllati (abituati a 
considerare qualunque possibilita' e a non lasciare nulla all'imprevisto)
*) il nome dato alla funzione (strreplace()) puo' creare problemi (vd. post 
di Silvestri)
Ciao


camillo ha scritto:

...la funzione, nella versione con strchr(), io la farei cosi' (anch'io te 
la posto di notte, quindi speriamo bene...! :-) ):
=====================
#include <stdio.h>
#include <string.h>
char *StrBfReplace(char *sBf, int iChSearch, int iChReplace)
{
	if(iChSearch && iChReplace && sBf)
	{	char *p;
		for (p = sBf; (p = strchr(p, iChSearch)); p++)
			*p = iChReplace;
	}
	return sBf;
}
int main(void)
{
	char bf[] = "1234.56\n567.78";
	printf("%s\n", StrBfReplace(bf, '.', ','));
	return 0;
}
=====================
Ciao
