我有这样的意见:
x4.9
x.25
C400
删除第一个char并转换为float的最佳方法是什么?
答案 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
}
可以改进错误处理,但这应该可以帮助您。