以下代码将一个
std::string
转换为 int
,问题在于它无法区分真正的整数和随机字符串。有没有一种系统的方法来处理这样的问题?#include <cstring>
#include <iostream>
#include <sstream>
int main()
{
std::string str = "H";
int int_value;
std::istringstream ss(str);
ss >> int_value;
std::cout<<int_value<<std::endl;
return 0;
}
编辑:这是我喜欢的解决方案,因为它非常简洁优雅!它不能处理负数,但我只需要正数。
#include <cstring>
#include <iostream>
#include <sstream>
int main()
{
std::string str = "2147483647";
int int_value;
std::istringstream ss(str);
if (ss >> int_value)
std::cout << "Hooray!" << std::endl;
std::cout<<int_value<<std::endl;
str = "-2147483648";
std::istringstream negative_ss(str);
if (ss >> int_value)
std::cout << "Hooray!" << std::endl;
std::cout<<int_value<<std::endl;
return 0;
}
if (ss >> int_value)
可能是一个不错的开始。 - WhozCraigss >> int_value;
替换为if (ss >> int_value) std::cout << "Hooray!" << std::endl;
。 - WhozCraig"10"
、"-100"
和" -42"
都可以使用。如果这是您想要的方法,那么它是一个非常强大的机制。如果您希望除了纯数值(包括可选符号)外,任何其他内容都失败,甚至在前导空格上也会失败,那么它就不适合,或者至少需要一些准备工作。 - WhozCraig