无法分别解析尾数和指数值

时间:2016-07-14 17:54:59

标签: c++ c++11

我想分别将基数和指数值分开。我从用户那里得到一个输入,其形式如下所示。我想单独存储基数和指数
输入3.54e45
我想把base和exponent分开。
我试着用stod把字符串转换成整数但是它给了我的形式base e + exponent而且我不知道如何将它们分开存储

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

2 个答案:

答案 0 :(得分:2)

  

我想把base和exponent分开。

然后单独解析它们,而不是在第一个位置解析double值:

#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 :(得分: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;
}

如果你不想拥有&#39; e&#39;指数内的字符,只需将相应的行更改为:

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

输出:

Result