2016-07-14 3 views
-2

Я хочу разделить базовое и экспоненциальное значение отдельно. Я получаю ввод от пользователя, который находится в форме, указанной ниже. Я хочу отдельно хранить базу и экспонента
Вход-3.54 e45
Я хочу взять базу и экспонента отдельно.
Я пытаюсь использовать STOD для преобразования строки в целое число, но это дает мне в виде электронной базы + экспоненте, и я не знаю, как хранить их separateyНевозможно разобрать мантисса и значение экспонента отдельно

int main() { 
    double number; 
    string a; 
    cin>>a; 
    try { 
     number=stod(a); 
    } 
    catch(exception const &e) { 
    } 
    cout<<number; 
} 
+0

Вы * не определено поведение * в вашем коде, вы используете переменную 'counts', если она не была инициализирована. Локальные нестатические переменные, которые не были инициализированы, имеют * неопределенное * значение. –

+0

Ну, это было для других целей, удалено – Bing

+3

Что касается вывода 'number', это, вероятно, чисто презентационная проблема. Может быть, вы должны попробовать [изменить формат] (http://en.cppreference.com/w/cpp/io/manip/fixed)? –

ответ

2

Я хочу взять базу и показатель отдельный.

Затем разобрать их по отдельности, а не разбор значения double в 1-е место:

#include <iostream> 
#include <sstream> 
#include <string> 

int main() { 

    std::string a = "3.54e45"; // Read a with cin>>a; alternatively 

    double mantissa; 
    int exponent; 
    std::string current_part; 

    std::istringstream iss(a); 
    getline(iss, current_part, 'e'); // Split off the mantissa 
    mantissa = std::stod(current_part); 
    getline(iss, current_part); // Get the exponent 
    exponent = stoi(current_part); 

    std::cout << "Mantissa:" << mantissa << ", Exponent: " << exponent << std::endl; 
} 

Выход на

Mantissa:3.54, Exponent: 45 

Live Demo

1

Если я вас понимаю в правильном направлении , то вам просто нужен разделитель:

#include <string> 
#include <iostream> 

using namespace std; 

int main() { 
    double number; 
    string input, base, exponent; 
    string delimiter = "e"; 
    size_t pos = 0; 

    std::cout << "Type in a floating-point number: "; 
    std::cin >> input; 

    number = stod(input); 
    std::cout << "\nThe number is: " << number << std::endl; 

    pos = input.find(delimiter); 
    base = input.substr(0, pos); 
    exponent = input.substr(pos, input.length()); 

    std::cout << "The base is: " << base << std::endl; 
    std::cout << "The exponent is: " << exponent << std::endl; 

    return 0; 
} 

Если вы не хотите иметь 'е' характер в показателе, просто изменить соответствующую строку в:

exponent = input.substr(pos + delimiter.length(), input.length()); 

Выход:

Result

+0

Как вы можете видеть из моего ответа, этот код можно было бы упростить. –

Смежные вопросы