在 VC++ Float 数据类型值中,如何检查字符串或特殊字符是不是没有混合

Posted

技术标签:

【中文标题】在 VC++ Float 数据类型值中,如何检查字符串或特殊字符是不是没有混合【英文标题】:In VC++ Float data type value, how do you check if string or special characters are not mixed在 VC++ Float 数据类型值中,如何检查字符串或特殊字符是否没有混合 【发布时间】:2013-10-25 07:26:25 【问题描述】:

值数据类型为Float。在这里,我需要验证该值是否只有数字(int,float)而不是stringspecial character

例如:值 = 123df.125

如果字符串是混合的,如何检查值。

这里需要显示警告信息"the value is not proper"

【问题讨论】:

您认为1.44E79 是浮点值吗? (即 1.44 * 10^79) 【参考方案1】:

如果你给了一个字符串,你可能想试试这个。

bool contains_digits (const std::string &str)

    return str.find_first_not_of ("0123456789") == std::string::npos;


/* C++ 11 */
bool contains_digits(const std::string &str)

    return std::all_of (str.begin(), str.end(), ::isdigit);

【讨论】:

对于浮点值,当然要允许更多字符:"+-.eEfF"【参考方案2】:

如果您从用户输入(例如 cli 或文件)获取数据,您可以检查读取操作是否失败:

float f;

if( std::cin >> f )
    std::cout << "OK, a number value was readed" << std::endl;
else
    std::cout << "ERROR: Something that is not a number is at the input, so cin cannot read it as a float" << std::endl;

【讨论】:

【参考方案3】:

另一种 C++11 解决方案:

#include <iostream>
#include <string>
#include <stdexcept>

int main() 

    std::string wrong"123df.125";
    std::string totallyWrong"A123";
    std::string right"123.125";
    try
    
        size_t pos = 0;
        float value = std::stof(right, &pos);
        if(pos == right.size())
            std::cout << "Good value:" << value << "\n";
        else
            std::cout << "Provided value is partly wrong!\n";

        pos = 0;
        value = std::stof(wrong, &pos);
        if(pos == right.size())
            std::cout << "Good value: " << value << "\n";
        else
            std::cout << "Provided value is partly wrong!\n";

        value = std::stof(totallyWrong, &pos);
    
    catch(std::invalid_argument&)
    
        std::cout << "Value provided is invalid\n";
    
    return 0;

【讨论】:

以上是关于在 VC++ Float 数据类型值中,如何检查字符串或特殊字符是不是没有混合的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel迁移中将数据类型float更改为string

如何在scala中检查用户输入类型(数据类型)?

如何在chartjs数据集中为Object []使用x值中的日期,我收到一个错误:'TS2322:类型'字符串'不可分配给类型'数字'。

VC常用数据类型使用转换

谁能解释一下float4数据类型

Python 语法:如何检查返回值中是不是存在“x”?