【问题标题】:get a double out a string c++得到一个双倍的字符串c ++
【发布时间】:2013-07-18 11:10:54
【问题描述】:

我正在寻找一种在 c++ 中从字符串中获取双精度的有效方法。我现在使用 cstring to double 函数,但是我不能使用它,因为这个字符串是以下格式:

DOUBLE - SPACE - REST OF STRING THAT I ALSO NEED TO SAVE.

问题是双精度可以有不同的大小,所以我怎样才能有效地获得双精度并且我仍然能够保存字符串的其余部分。

【问题讨论】:

  • 到目前为止你尝试了什么..?您是否有一些代码可以发布以向我们展示您的尝试?
  • 您是否尝试过将字符串拆分为可管理的可解析部分?

标签: c++ string double


【解决方案1】:
std::istringstream s( theString );
s >> theDouble;

s 现在包含字符串的其余部分,可以轻松提取。

【讨论】:

    【解决方案2】:

    使用istringstream 读取双精度值,忽略一个字符(需要空格),并读取行的其余部分。

    string s = "1.11 my string";
    
    double d;
    string rest;
    
    istringstream iss(s);
    iss >> d;
    iss.ignore(); // ignore one character, space expected.
    getline(iss, rest, '\0');
    

    【讨论】:

    • +1,但很高兴看到 if (iss >> d && iss.ignore() && getline(iss, rest)) ...; else std::cerr << "failed\n"; - 太多 C++ 初学者认为输入成功并浪费时间理解他们的错误......
    • 我复制了它,它几乎可以工作,但是我现在得到以下错误:main.cpp|31|error: variable ‘std::istringstream iss’ has initializer but incomplete type|。我该如何解决这个问题?
    • @Aesir 您缺少一个包含,很可能是
    • 啊,我确实包括了 Istream,tnx。
    【解决方案3】:

    如果您的输入有固定格式。你可以,首先用空格分割它。然后你有以下内容:

    DOUBLE
    REST OF STRING THAT I ALSO NEED TO SAVE.
    

    拆分:

    std::string str = "3.66 somestring";
    std::stringstream ss(str);
    std::string buffer;
    while(std::getline(ss, buffer, ' ')) {
      // add necessary data to containers...
    }
    

    现在您可以使用std::atof 解析您的双精度数。

    编辑:添加拆分代码:

    【讨论】:

    • @Dukeling:我的意思是,一个双倍,一个空格,其余的是字符串。在这种情况下,从空间中分割应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2015-09-02
    • 2014-02-28
    • 1970-01-01
    相关资源
    最近更新 更多