web-dev-qa-db-ja.com

C ++文字列から二重変換

通常、C++で何かを記述し、charintに変換する必要がある場合、charと同じ新しいintを作成します。

私はコード(スニペット)を使用しました

 string Word;  
 openfile >> Word;
 double lol=Word;

エラーが表示されます

Code1.cpp cannot convert `std::string' to `double' in initialization 

エラーの正確な意味は何ですか?最初の言葉は50です。ありがとう:)

30
TimeCoder

マシンの場合、intとcharは同じ8ビットであるため、charをintおよびその逆に簡単に変換できます。数字が65でcharとして保存されている場合、画面に表示する必要がある場合にのみ違いがあります。その後、「A」が表示され、intとして保存されている場合は65が表示されます。

他のタイプでは、メモリに格納される方法が異なるため、状況は変化します。 Cには、文字列から二重に簡単に変換できる標準関数があります。これはatofです。 (stdlib.hを含める必要があります)

#include <stdlib.h>

int main()
{
    string Word;  
    openfile >> Word;
    double lol = atof(Word.c_str()); /*c_str is needed to convert string to const char*
                                     previously (the function requires it)*/
    return 0;
}
52
0x77D
#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << stod("  99.999  ") << endl;
}

出力:99.999(これは二重で、空白は自動的に削除されました)

文字列を浮動小数点値(doubleなど)に変換するC++ 11は、関数で使用できます。
stof -strをfloatに変換します
stod -strをdoubleに変換します
stold -strをlong doubleに変換します

文字列からintへの変換についても質問で言及されているため、C++ 11には次の関数があります。
stoi -strをintに変換します
stol -strをlongに変換します
stoul -strをunsigned longに変換します
stoll -strをlong longに変換します
stoull -strをunsigned long longに変換します

28
Bad

問題は、C++が静的に型付けされた言語であるということです。つまり、何かがstringとして宣言されている場合は文字列であり、何かがdoubleとして宣言されている場合はdoubleです。 JavaScriptやPHPなどの他の言語とは異なり、変換が明確に定義されていない可能性があるため、文字列から数値に自動的に変換する方法はありません。たとえば、文字列_"Hi there!"_をdoubleに変換しようとしても、意味のある変換はありません。もちろん、coulddoubleを0.0またはNaNに設定するだけですが、これはほとんど間違いなくコードに問題があるという事実を隠しています。

これを修正するには、ファイルの内容を文字列にバッファリングしないでください。代わりに、doubleに直接読み込むだけです:

_double lol;
openfile >> lol;
_

これは値を実数として直接読み取ります。エラーが発生すると、ストリームの.fail()メソッドはtrueを返します。例えば:

_double lol;
openfile >> lol;

if (openfile.fail()) {
    cout << "Couldn't read a double from the file." << endl;
}
_
14
templatetypedef

あなたがファイルから読んでいるなら、あなたは与えられたアドバイスを聞いて、それをダブルに入れるべきです。

一方、たとえば文字列がある場合は、ブーストの lexical_cast を使用できます。

以下は(非常に単純な)例です。

int Foo(std::string anInt)
{
   return lexical_cast<int>(anInt);
}
4
MatiasFG

変換を解決するC++の方法(従来のCではありません)を以下のプログラムで示します。意図は、iostreamが提供する精度、塗りつぶし文字、パディング、16進数、マニピュレータなどのフォーマット機能を使用できることに注意してください。

このプログラムをコンパイルして実行し、調査します。それは単純だ

#include "iostream"
#include "iomanip"
#include "sstream"
using namespace std;

int main()
{
    // Converting the content of a char array or a string to a double variable
    double d;
    string S;
    S = "4.5";
    istringstream(S) >> d;    
    cout << "\nThe value of the double variable d is " << d << endl;
    istringstream("9.87654") >> d;  
    cout << "\nNow the value of the double variable d is " << d << endl;



    // Converting a double to string with formatting restrictions
    double D=3.771234567;

    ostringstream Q;
    Q.fill('#');
    Q << "<<<" << setprecision(6) << setw(20) << D << ">>>";
    S = Q.str(); // formatted converted double is now in string 

    cout << "\nThe value of the string variable S is " << S << endl;
    return 0;
}

マルティネス教授

1

ライブラリ 'stdlib.h'の 'strtod()'関数を使用して、文字列からdoubleへの変換を実現できます。

#include <iostream>
#include <stdlib.h>
int main () 
{
    std::string data="20.9";
    double value = strtod(data.c_str(), NULL);
    std::cout<<value<<'\n';
    return 0;
}
0
EleetGeek