Dezimalpunkt durch Komma ersetzen

Gast #1031814
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
Persönliche Seite #1031819
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
Moderator (Firma: Titel) Persönliche Seite #1032327
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
:
Moderator Persönliche Seite #1032335
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
  }

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.