有没有人知道确定字符串值是否"合格"为浮点数的便捷方法?
bool IsFloat( string MyString )
{
... etc ...
return ... // true if float; false otherwise
}
Run Code Online (Sandbox Code Playgroud) 检查它是否可以是一个int很容易 - 只需检查每个数字是否在'0'和之间'9'.但浮动更难.我找到了这个,但没有一个答案真的有效.请考虑此代码段,基于顶部(已接受)答案:
float f;
int ret = sscanf("5.23.fkdj", "%f", &f);
printf("%d", ret);
Run Code Online (Sandbox Code Playgroud)
1 将被打印.
另一个答案建议使用strpbrk,检查是否存在某些非法字符,但这不会起作用,因为5fin7这不合法,但inf会.
另一个答案建议检查strtod的输出.但考虑一下:
char *number = "5.53 garbanzo beans"
char *foo;
strtod(number, &foo);
printf("%d", isspace(*foo) || *foo == '\0'));
Run Code Online (Sandbox Code Playgroud)
它会打印出来1.但我不想isspace完全删除呼叫,因为" 5.53 "应该是一个有效的号码.
有没有一种优雅,优雅,惯用的方式去做我想做的事情?
我一直在寻找一种方法来确定我的字符串值是否是一个有效的双倍,而我还没有找到一种方法也不会拒绝一个带有一个点的数字...
在我的搜索中,我找到了这个
而Charles Salvia给出的答案是
bool is_number(const std::string& s)
{
std::string::const_iterator it = s.begin();
while (it != s.end() && std::isdigit(*it)) ++it;
return !s.empty() && it == s.end();
}
Run Code Online (Sandbox Code Playgroud)
这适用于任何没有点的数字,但有点的数字会被拒绝...
介绍(来自 Eric Lippert 博客):
令人烦恼的异常是不幸的设计决策的结果。恼人的异常是在完全非异常的情况下抛出的,因此必须一直被捕获和处理。
令人烦恼的异常的经典示例是 Int32.Parse,如果给它一个无法解析为整数的字符串,它就会抛出异常。但是此方法的 99% 用例是转换用户输入的字符串,这可能是任何旧事物,因此解析失败绝不是例外。更糟糕的是,如果不自己实现整个方法,调用者就无法提前确定他们的参数是否错误,在这种情况下,他们不需要首先调用它。
现在重要的部分:
这个不幸的设计决定非常令人烦恼,因此框架团队当然在此后不久实施了 TryParse,它做了正确的事情。
来自 MSDN Int32.TryParse:
返回值 类型:System.Boolean 如果 s 转换成功,则为 true;否则为假。
所以同事最近正在研究一些需要检查字符串是否是数字的小代码,所以在考虑之后并意识到没有好的 C++ 解决方案(基本上它是一个 for__each/find_if 或 boost:lexical_cast try catch)我想拥有is_convertible或来自 boost 的东西会有多好?
Ofc 我可以包装 boostlexical_cast并在 try 块的末尾返回 true 并在 catch 块的末尾返回 false 但我更喜欢现有的做法:) 解决方案。
我想知道什么是最好的方法,从一个写std::stringstream成vector<int>.
以下是以下内容的示例stringstream:
"31 #00 532 53 803 33 534 23 37"
这是我得到的:
int buffer = 0;
vector<int> analogueReadings;
stringstream output;
while(output >> buffer)
analogueReadings.push_back(buffer);
Run Code Online (Sandbox Code Playgroud)
然而,似乎发生了什么,它首先读取,然后它到达#00并返回,0因为它不是一个数字.
理想情况下,我想要的是,它到达a #然后只是跳过所有字符直到下一个空格.这可能是旗帜或其他什么?
谢谢.
我是静态类型 C++ 的新手。在 JavaScript 中,我可以先检查数据类型,但这似乎非常复杂,而且答案似乎都暗示您没有“了解”该语言。
这是我用来测试 rand() 的代码,在那里我遇到了将字符串转换为整数的问题:
int main(){
std::string input;
cout <<endl<< "What to do?"<<endl;
cin >> input;
if (input == "rand")
{
cout << "what is the max?" << endl;
cin >> input;
int number;
if (stoi(input) > 1) {
number = stoi(input);
}
else {
number = 10;
cout << "using 10"<<endl;
}
cout << rand() % stoi(input);
return main();
}
}
Run Code Online (Sandbox Code Playgroud)
所以在 Javascript 中,我只会检查输入或结果的类型,但是人们在 C++ 中做什么?
不允许在评论中说谢谢,所以我在这里说谢谢!