Forum: Compiler & IDEs Dezimalpunkt durch Komma ersetzen


von Loipe (Gast)


Lesenswert?

Hallo,

Mit diesem Befehl konvertiere ich eine Floatzahl in einen String
1
dtostrf (floatvar,1,2,stringvar);

Nun steht z.B. in stringvar die Zahl 123.45
Ich möchte nun, dass der Punkt in der Zahl durch ein Komma ersetzt wird.
Wie muss ich das machen ?

Danke

Gruß Alex

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Also ich würde den String Zeichen für Zeichen auswerten, und sobald das 
aktuelle Zeichen (z.B. stringvar[3]) ein . ist, würde ich dann eben in 
die Variable anstatt dem . ein , schreiben....
Hier mal ein Beispiel:
1
i=0;
2
while(stringvar[i] != ' ') //solange stringvar ein Zeichen ist
3
{ 
4
if(stringvar[i] == '.')  //Wenn stringvar ein . ist
5
{
6
stringvar[i] = ','; //Punkt durch Komma ersetzten
7
}
8
i++;
9
}

Müsste eigentlich so passen...

Gruß, Steffen

von B e r n d W. (smiley46)


Lesenswert?

1
char *ptr;
2
dtostrf(floatvar,1,2,stringvar);
3
ptr = strstr(stringvar, ".");
4
if (ptr) {
5
  *ptr = ',';
6
}

von Loipe (Gast)


Lesenswert?

Danke für die schnellen Antworten,

habe beide Versionen getestet und beide funktionieren auch.
Vielen Dank

Gruß Alex

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

1
i=0;
2
while(stringvar[i] != ' ') //solange stringvar ein Zeichen ist
3
{ 
4
  if(stringvar[i] == '.')  //Wenn stringvar ein . ist
5
  {
6
     stringvar[i] = ','; //Punkt durch Komma ersetzten
7
  }
8
  i++;
9
}
Schau, schau, ein amoklaufender Pointer  :-o
>> solange stringvar ein Zeichen ist
Ein Leerzeichen ist ein gültiges Zeichen. In C ist ein String mit einer 
Null terminiert. Damit rennt i vorerst mal solange weiter, bis es auf 
ein 0x20 trifft. Und bis dahin werden alle Speicherzellen, in denen ein 
ein 0x2e enthalten ist, in 0x2c abgeändert.

Richtigerweise müsste das eher so heissen:
1
i=0;
2
while(stringvar[i] != '\0') //solange stringvar ein Zeichen ist
3
:
oder so:
1
i=0;
2
while(stringvar[i]) //solange stringvar ein Zeichen ist
3
:

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Oder in der C-typischen kryptischen Zeigerschreibweise:
1
while (char *cp = stringvar; *cp; cp++)
2
  if (*cp == '.') *cp = ',';

(Die Deklaration der Variablen innerhalb der for-Anweisung braucht
-std=c99 oder -std=gnu99.)

Optional auch nur den ersten Punkt ersetzen:
1
while (char *cp = stringvar; *cp; cp++)
2
  if (*cp == '.') {
3
    *cp = ',';
4
    break;
5
  }

von Detlev T. (detlevt)


Lesenswert?

Ich hätt auch noch einen:
1
char * p;
2
3
if(p = strchr(stringval, '.')) *p = ',';

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.