我想将我的字符串向量转换为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?
答案 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