www.mikrocontroller.net

Forum: Compiler & IDEs Dezimalpunkt durch Komma ersetzen


Autor: Loipe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Mit diesem Befehl konvertiere ich eine Floatzahl in einen String
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

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
i=0;
while(stringvar[i] != ' ') //solange stringvar ein Zeichen ist
{ 
if(stringvar[i] == '.')  //Wenn stringvar ein . ist
{
stringvar[i] = ','; //Punkt durch Komma ersetzten
}
i++;
}

Müsste eigentlich so passen...

Gruß, Steffen

Autor: B e r n d W. (smiley46)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char *ptr;
dtostrf(floatvar,1,2,stringvar);
ptr = strstr(stringvar, ".");
if (ptr) {
  *ptr = ',';
}

Autor: Loipe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnellen Antworten,

habe beide Versionen getestet und beide funktionieren auch.
Vielen Dank

Gruß Alex

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
i=0;
while(stringvar[i] != ' ') //solange stringvar ein Zeichen ist
{ 
  if(stringvar[i] == '.')  //Wenn stringvar ein . ist
  {
     stringvar[i] = ','; //Punkt durch Komma ersetzten
  }
  i++;
}
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:
i=0;
while(stringvar[i] != '\0') //solange stringvar ein Zeichen ist
:
oder so:
i=0;
while(stringvar[i]) //solange stringvar ein Zeichen ist
:

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder in der C-typischen kryptischen Zeigerschreibweise:
while (char *cp = stringvar; *cp; cp++)
  if (*cp == '.') *cp = ',';

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

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

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätt auch noch einen:
char * p;

if(p = strchr(stringval, '.')) *p = ',';

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.