質問

私は数値のリストになるようになります: 1.234D+1 または 1.234D-02.たいファイルの読み込み用Cの機能 atof まずは無視 D 分翻訳では、仮数.

の機能 fscanf お受けしておりませんの形式 '%10.6e' が見込まれること E の代わりに D の眠しました。

私はこの問題にPythonったとだけに利用される文字列置換の前に変換する文字列をfloat. がC思があるはずの別の言い方.

なので、あなたは何点ぐらいになると思いファイルを読み込んだ数字を使用 D の代わりに E 科学表記?こうすることを意味するものではなく読めるように文字列には、それ自体ではどのように変換してい浮かぶ.

感謝。

役に立ちましたか?

解決

ご活用いただけ strtodstrtok:

#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()文字列メソッドを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top