1

次のような数字のリストがあります:1.234D+1または1.234D-02. C を使用してファイルを読みたいと思います。この関数atofは単に を無視しD、仮数のみを変換します。

指数に a ではなく aが必要なため、この関数fscanfはこの形式を受け入れません。'%10.6e'ED

Python でこの問題に遭遇したとき、あきらめて、文字列から浮動小数点数に変換する前に単に文字列置換を使用しました。しかし、C では、別の方法があるに違いないと確信しています

では、科学表記法Dの代わりに数字を使用してファイルを読み取るにはどうすればよいでしょうか。E文字列自体を読み取る方法ではなく、浮動小数点数に変換する方法を意味していることに注意してください。

ありがとう。

4

3 に答える 3

2

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
于 2010-03-31T17:42:17.790 に答える
1

文字列に沿ってループすることにより、D を E に置き換えます。それからatof

于 2010-03-31T17:33:17.950 に答える
0

ここで、この関数は、科学表記法の「D」を「E」に置き換えて「D」に置き換えます。

std::string dToE(string cppstr)
{
    str1.replace(cppstr.find("D"),1,"E");
    return cppstr;
}

科学表記法の C 文字列が次のように定義されている場合: char * cstr = "1.2D+03"; または、通常strtokは C 文字列を返すメソッドでatof(dToE(string(cstr)).c_str())取得し、「E」で科学表記法を取得するために使用します。

atofC スタイルの文字列のみを受け入れるため、string メソッドを使用しc_str()て C++ 文字列を C 文字列に変換する必要があります。

于 2014-05-20T05:47:19.723 に答える