Я пытаюсь получить от stdin два числа с плавающей точкой, разделенных символом "e" в C / C ++.
Ввод: 4.2e3
Когда я кодирую
#include <cstdio>
int main(){
float a, b;
scanf("%fe%f", &a, &b);
printf("%f %f", a, b);
return 0;
}
Я получаю 4200.000000 0.000000
, но когда я изменяю символ "e" как на входе, так и в коде, тогда я получаю 4.200000 3.000000
, что является ожидаемым результатом.
Я решаю эту проблему, используя строку, разбиение и приведение, но это очень нечисто для меня. Вот код, который я написал
#include <iostream>
#include <bits/stdc++.h>
#include <boost/algorithm/string.hpp>
#include <string>
using namespace std;
int main(){
float a, b;
string line;
vector<string> numbers;
cin >> line;
boost::split(numbers, line, boost::is_any_of("e"));
a = strtod(numbers[0].c_str(), 0);
b = strtod(numbers[1].c_str(), 0);
printf("%f %f", a, b);
return 0;
}
Есть ли лучший способ решения этой проблемы, особенно более быстрый, благодаря чтению тысяч таких строк?