C ++将一些浮点值转换为字符串

时间:2015-01-24 13:39:52

标签: c++ string split

我的观点是,我完全不知道该怎么做;我有一小段数据(例如f24.57e62.74d41.0)。我想要做的是3个功能:

  1. 我取f(= 24.57)的值并将其返回
  2. 我取e(= 62.74)的值并将其返回
  3. 我取d(= 41.0)的值并将其返回
  4. 我不知道该怎么做。我尝试使用boost :: split,但如果我与f分开,我得到24.57e62.74d41.0 ... 事实是,f,e和d将在这里每次,任何情况下处理。所以,你认为我能用分裂(或其他)得到f,e和d的位置然后从那里得到值吗? 我不知道这是否可以理解。所以有两点:

    1. 我将收到一个f,e和d的值,它与浮点值相邻。
    2. 我想从中获取浮点值。 提前谢谢你。
    3. 编辑:代码:

      std::string m_specif = "f24.57e62.74d41.0";
      std::vector<std::string> fields;
      boost::split(fields, m_specif, boost::is_any_of("f")); // Will get 24.57e62.74d41.0 at fields[1]
      std::cout << fields[1]
      

4 个答案:

答案 0 :(得分:0)

使用捕获组或正面观察。

"(?<=[edf])\\d+(?:\\.\\d+)?"

从组索引0中获取所需的数字。

"[edf](\\d+(?:\\.\\d+)?)"

从群组索引1中获取所需的数字。

DEMO

答案 1 :(得分:0)

只需使用atof()

std::string data("f24.57e62.74d41.0");
std::vector<std::string> values;
boost::split(values, data, boost::is_any_of("fed"));

double fValue = strtod(values[0].c_str(), NULL);
double eValue = strtod(values[1].c_str(), NULL);
double dValue = strtod(values[2].c_str(), NULL);

编辑:或者,如@basav所说,您可以使用atof()

答案 2 :(得分:0)

1)找到两点的位置,这里是f&amp; ë

   int pos1= string.find('f')
  int pos2= string.find('e')

2)然后使用substr()将这些位置之间的字符相应地拉入一个新字符串。

newstring=string.substr(pos1+1,pos2-1);

如果您之后需要将其转换为浮动,则可以使用:

double temp = ::atof(newstring.c_str());

答案 3 :(得分:0)

我们可以做一个正常的循环:

std::string data("f24.57e62.74d41.0");
size_t it = data.find_first_of("def");
while (it != std::string::npos) {
    size_t next = data.find_first_of("def", it + 1);
    std::cout << "The value of " << data[it] << " is " << 
        std::stof(data.substr(it + 1, next - it - 1)) << std::endl;
    it = next;
}

或者,我们可以尝试使用istringstream

std::string data("f24.57e62.74d41.0");
std::istringstream iss(data);

char c;
double d;
while (iss >> c >> d) {
    std::cout << "value of " << c << " is " << d << std::endl;
}

至少那样可以工作,如果不是为了这个目的而被视为科学记数法的'e'那么就会很好和干净,所以解析出的第一个双精度是24.57e62。因此,如果您可以将e更改为任何非e的其他字母,则可以选择此选项。