2012-04-09 10 views
1

Ich frage mich, ob es ein Weg, um eine temporäre Zeichenfolge in diesem Fall zu vermeiden ist, mit:vermeiden, temporäre Zeichenfolgen mit .c_str-Befehl zu verwenden?

tempString = inputString.substr(commaLast,commaCurrent-1); 
yPos = strtod(tempString.c_str(), NULL); 

Es gibt keine Möglichkeit, den substr Befehl zu verwenden und ein c_str Rückkehr ohne zuerst den Teil in einer temporären Zeichenfolge zu speichern (Angenommen, ich möchte die ursprüngliche Zeichenfolge nicht ändern).

+0

Machst du sonst noch etwas mit inputString? Die Tatsache, dass Sie strtod und c_str an erster Stelle verwenden, deutet darauf hin, dass Sie stattdessen eine bessere Lösung mit einem std :: stringstream erhalten könnten. –

+0

Ja, ich teile die Zeichenfolge basierend auf verschiedenen Bedingungen. Ich versuche eine SVG-Zeile zu parsen. Ich habe mir std :: strainsteam angeschaut, aber ich dachte, das wäre nur gut für die Whitespace-Aufteilung. – jimspree1200

+0

Der >> Operator ist standardmäßig whitespace, aber Sie müssen sich nicht davon abhalten lassen; Mit einem Stringstream können Sie String-Daten genauso verarbeiten wie mit std :: cin, also können Sie vor/nach dem Lesen nachfolgende Zeichen überspringen, indem Sie 'istream :: ignore (/ * ... * /)' up verwenden zu und einschließlich eines beliebigen Trennzeichens Ihrer Wahl. (Ich weiß nicht viel über das SVG-Format, so dass es für Sie nützlich sein kann oder auch nicht - aber ich finde, es funktioniert gut für einfache abgegrenzte Daten) –

Antwort

0

Haben Sie Folgendes versucht?

yPos = strtod(inputString.substr(commaLast,commaCurrent-1).c_str(), NULL); 
+0

Arg! Ich hätte schwören können, dass ich es getan habe! Ich glaube, ich habe versucht: yPos = strtod (inputString.c_str(). Substr (KommaLast, KommaCurrent-1), NULL); – jimspree1200