string to int值丢失了

时间:2017-05-16 14:24:07

标签: c++ string casting int

我想将我的字符串向量转换为int,但首先我想检查它是整数还是浮点数。

例如

   //private member h file
   unsigned int lemon; // cant write auto lemon so I cant check what type it is
   unsigned int sugar;
   unsigned int water;



  //method
  int class::name(std::vector<std::string> params)

    std::stringstream str0(params.at(1));

    str0 >>lemon;

    std::cout<<lemon<<std::endl;

现在我想检查柠檬里面是什么。 现在当我在main中运行并写下以下输入

  3.2 

它给了我

  3 

当我检查params.at(1)时,它只是将我之前写的输入归还给我。

 3.2

有人可以告诉我出了什么问题,我怎样才能检查字符串是否为float / double / int?

2 个答案:

答案 0 :(得分:-1)

如果您想获得确切的输入值(用户提供的方式),请使用string来保存值。 如果需要保存浮点值,请使用类型double来保存值。

类型int只能保存整数值,例如3。

答案 1 :(得分:-1)

当您使用&gt;&gt;从流中提取int时,只要有可以被视为int的一部分的字符,它就会读取。整数不允许小数部分,因此int值中没有小数点。

您可以尝试解析为int并检查解析是否使用了所有输入字符。或者解析为float并查看结果是否为小数:

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

int main()
{

    unsigned int i;
    std::stringstream str0("3");
    std::stringstream str1("3.2");

    str0 >>i;
    std::cout << i << "  " << str0.eof() << std::endl;
    str1 >>i;
    std::cout << i << "  " << str1.eof() << std::endl;

    double d;
    std::stringstream str2("3");
    std::stringstream str3("3.2");

    str2 >>d;
    std::cout << d << "  " << (d == floor(d)) << std::endl;
    str3 >>d;
    std::cout << d << "  " << (d == floor(d)) << std::endl;

}

输出:

3  1
3  0
3  1
3.2  0