相关疑难解决方法(0)

C++ IsFloat函数

有没有人知道确定字符串值是否"合格"为浮点数的便捷方法?

bool IsFloat( string MyString )
{
   ... etc ...

   return ... // true if float; false otherwise
}
Run Code Online (Sandbox Code Playgroud)

c++ string floating-point

24
推荐指数
5
解决办法
3万
查看次数

有没有办法检查字符串是否可以是C中的浮点数?

检查它是否可以是一个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 "应该是一个有效的号码.


有没有一种优雅,优雅,惯用的方式去做我想做的事情?

c string number-formatting

16
推荐指数
4
解决办法
2653
查看次数

如何验证字符串是否有效(即使它有一个点)?

我一直在寻找一种方法来确定我的字符串值是否是一个有效的双倍,而我还没有找到一种方法也不会拒绝一个带有一个点的数字...

在我的搜索中,我找到了这个

如何确定字符串是否是带C++的数字?

而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)

这适用于任何没有点的数字,但有点的数字会被拒绝...

c++ string double

10
推荐指数
3
解决办法
9706
查看次数

是否有相当于 C# TryParse 的 boost lexical_cast?

介绍(来自 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 但我更喜欢现有的做法:) 解决方案。

c# c++ boost exception

5
推荐指数
1
解决办法
667
查看次数

Stringstream to vector <int>

我想知道什么是最好的方法,从一个写std::stringstreamvector<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++ stringstream visual-studio-2010 lexical-cast

4
推荐指数
1
解决办法
7926
查看次数

如果您要求一个整数并且用户输入“b”,您在 C++ 中会做什么?

我是静态类型 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++ 中做什么?

不允许在评论中说谢谢,所以我在这里说谢谢!

c++ string static input

-1
推荐指数
1
解决办法
111
查看次数