5

私は一日中これに対する解決策を見つけようとしていました!これを再投稿とラベル付けするかもしれませんが、私が本当に探しているのは、boost lexical cast を使用しないソリューションです。それを行う伝統的なC++の方法は素晴らしいでしょう。このコードを試してみましたが、意味不明な数字と文字のセットが返されます。

string line; 
double lineconverted;

istringstream buffer(line);
lineconverted;
buffer >> lineconverted;

私もこれを試しましたが、常に0を返します。

stringstream convert(line);
if ( !(convert >> lineconverted) ) {
    lineconverted  = 0;
}

前もって感謝します :)

編集:私が使用した最初のソリューションについて(意味不明).ここにスナップショットがあります ここに画像の説明を入力

4

3 に答える 3

12
#include <sstream>

int main(int argc, char *argv[])
{
    double f = 0.0;

    std::stringstream ss;
    std::string s = "3.1415";

    ss << s;
    ss >> f;

    cout << f;
}

良いことは、このソリューションが int などの他のソリューションでも機能することです。

同じバッファを繰り返し使用する場合は、その間に行う必要がありますss.clear

値を stringstream に初期化し、同時に double にフラッシュできる短い解決策もあります。

#include <sstream>
int main(int argc, char *argv[]){
   stringstream("3.1415")>>f ;
}
于 2013-05-25T08:54:01.613 に答える
6

C++11以降、関数を使用できますstd::stod

string line; 
double lineconverted;

try
{
    lineconverted = std::stod(line);
}
catch(std::invalid_argument)
{
    // can't convert
}

しかし、std::stringstream正しい解決策:

#include <sstream>
#include <string>
#include <iostream>

int main()
{
    std::string str;
    std::cin >> str;
    std::istringstream iss(str);
    double d = 0;
    iss >> d;
    std::cout << d << std::endl;
    return 0;
}
于 2013-05-25T08:51:49.410 に答える
0

ラインのすべての double を (たとえばベクトルに) 格納する場合

#include <iostream>
#include <vector>
#include <iterator>

int main()
{

  std::istream_iterator<double> in(std::cin);
  std::istream_iterator<double> eof;
  std::vector<double> m(in,eof);

  //print
  std::copy(m.begin(),m.end(),std::ostream_iterator<double>(std::cout,"\n"));

}
于 2013-05-25T09:04:57.743 に答える