通常、C++で何かを記述し、char
をint
に変換する必要がある場合、charと同じ新しいint
を作成します。
私はコード(スニペット)を使用しました
string Word;
openfile >> Word;
double lol=Word;
エラーが表示されます
Code1.cpp cannot convert `std::string' to `double' in initialization
エラーの正確な意味は何ですか?最初の言葉は50です。ありがとう:)
マシンの場合、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;
}
#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に変換します
問題は、C++が静的に型付けされた言語であるということです。つまり、何かがstring
として宣言されている場合は文字列であり、何かがdouble
として宣言されている場合はdoubleです。 JavaScriptやPHPなどの他の言語とは異なり、変換が明確に定義されていない可能性があるため、文字列から数値に自動的に変換する方法はありません。たとえば、文字列_"Hi there!"
_をdouble
に変換しようとしても、意味のある変換はありません。もちろん、couldはdouble
を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;
}
_
あなたがファイルから読んでいるなら、あなたは与えられたアドバイスを聞いて、それをダブルに入れるべきです。
一方、たとえば文字列がある場合は、ブーストの lexical_cast を使用できます。
以下は(非常に単純な)例です。
int Foo(std::string anInt)
{
return lexical_cast<int>(anInt);
}
変換を解決する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;
}
マルティネス教授
ライブラリ '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;
}