読ASCII数字を"D"ではなく"E"のための科学表記法を使用C
-
23-09-2019 - |
質問
私は数値のリストになるようになります: 1.234D+1
または 1.234D-02
.たいファイルの読み込み用Cの機能 atof
まずは無視 D
分翻訳では、仮数.
の機能 fscanf
お受けしておりませんの形式 '%10.6e'
が見込まれること E
の代わりに D
の眠しました。
私はこの問題にPythonったとだけに利用される文字列置換の前に変換する文字列をfloat. がC思があるはずの別の言い方.
なので、あなたは何点ぐらいになると思いファイルを読み込んだ数字を使用 D
の代わりに E
科学表記?こうすることを意味するものではなく読めるように文字列には、それ自体ではどのように変換してい浮かぶ.
感謝。
解決
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char in[] = "1.234D+1 ABCD 1.234D-02 5\n";
char *cursor;
char *endp;
for ( cursor = strtok(in, " "); cursor; cursor = strtok(NULL, " ")) {
double d = strtod(cursor, &endp);
if ( *endp == 'D' ) {
*endp = 'e';
d = strtod(cursor, &endp);
}
if ( endp != cursor ) {
printf("%e\n", d);
}
}
return 0;
}
出力:
E:\> cnv 1.234000e+001 1.234000e-002 5.000000e+000
他のヒント
文字列に沿ってループすることにより、EとDを交換してください。その後、atof
ます。
ここでは、この機能は「D」との科学的表記で「E」に「D」を交換することです。
std::string dToE(string cppstr)
{
str1.replace(cppstr.find("D"),1,"E");
return cppstr;
}
科学的表記法のためのCの文字列がによって定義されている場合:
char * CSTR = "+ 03 1.2D"。
または通常Cの文字列を返すstrtok
法により得られた、次に「E」と科学的表記を取得するatof(dToE(string(cstr)).c_str())
を使用します。
atof
はCスタイルの文字列を受け入れているので、あなたはC文字列にC ++文字列を変換するためにc_str()
文字列メソッドを使用する必要があります。
所属していません StackOverflow