c ++检查xs:double数据类型

时间:2015-04-08 11:50:25

标签: c++ gcc

我有以下表格的数据:

x="12.847.E.89"
y="12-1.2344e56"

现在我想知道x和y是否确认xs:double数据类型http://www.w3.org/TR/xmlschema-2/#double。他们可能只有一个十进制和E,一个+或 - 在字符串的开头,也可能有任意数量的字母数字字符。例如。这里,y是xs:double数据类型,而x不是xs:double数据类型。

我知道我可以使用以下方法检查每个字符是否存在于字符串中:x.find('。')等。但这只有在角色存在与否时才会给我。它没有给我一种方法来指定或检查除了形式之外没有其他字符。,+, - ,E和E,+, - 它们本身出现一次并且符合xs:double数据类型。是否可以使用任何标准库函数在C ++中执行相同的操作。

我使用的gcc版本是:gcc(Ubuntu / Linaro 4.6.4-6ubuntu2)4.6.4

1 个答案:

答案 0 :(得分:2)

stod()接受第二个参数,该参数给出了它能够转换的字符数。您可以使用它来查看整个字符串是否已转换。这是一个例子:

#include <iostream>
#include <string>


int main()
{
    std::string good = "-1.2344e56";
    std::string bad = "12.847.E.89";
    std::string::size_type endPosition;

    double goodDouble = std::stod(good, &endPosition);
    if (endPosition == good.size())
        std::cout << "string converted is: " << goodDouble << std::endl;
    else
        std::cout << "string cannot be converted";

    double badDouble = std::stod(bad, &endPosition);
    if (endPosition == good.size())
        std::cout << "string converted is: " << badDouble << std::endl;
    else
        std::cout << "string cannot be converted";

    std::cin.get();
    return 0;
}

如果无法执行转换,则抛出invalid_argument异常。如果读取的值超出了可表示值的范围(在某些库实现中,这包括下溢),则抛出out_of_range异常。