C ++:如何将字符串转换为浮点数,其中起始字符可以更改?

时间:2010-08-27 22:03:39

标签: c++

我有这样的意见:

x4.9
x.25
C400

删除第一个char并转换为float的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

#include <iostream>

...
char c;
float f; 
std::cin >> c >> f;

std::cin >> c从标准输入读取一个字符并将字符存储在c中,std::cin >> f从标准输入读取并存储一个浮点数。 std::cin >> c >> f相当于std::cin >> c; std::cin >> f;

您可以循环上面的内容来阅读一系列输入。 <{1}}默认跳过空格,因此换行不会成为问题。

答案 1 :(得分:2)

您可以使用sscanf(),例如:

#include <stdio.h>

float f; 
char *str = "x4.9"; 

if( sscanf(str, "%*c%f", &f) == 1 )
{
    // use f as needed ...
}

答案 2 :(得分:0)

您的输入是面向行的,因此您可能希望先读取行,然后处理这些行:

// Beware, brain-compiled code ahead!
void process_line(std::istream& is);

void read_input(std::istream& is)
{
  while(is.good()) {
    std::string line;
    //is >> std::ws;            // might want to allow leading whitespace
    std::getline(is,line);
    if(is && !line.empty()) {
      std::istringstream iss(line); 
      process_line(iss);
      if(!iss.eof())            // reading number failed
        break;
    }
  }
  if(!is.eof()) // reading failed before eof
    throw("input error, read_input() blew it!");
}

void process_line(std::istream& is)
{
  char ch;
  double d;
  is >> ch >> d/* >> std::ws*/; // trailing whitespace usually often is acceptable
  if(!is.eof())                 // should be at the end of line
    return;
  process_number(ch,d);         // I don't know whether ch is important
}

可以改进错误处理,但这应该可以帮助您。