sscanfの代わりに何を使うべきですか?
-
06-07-2019 - |
質問
sscanfが解決する(文字列からものを抽出する)問題があります。タイプセーフではなく、古くて恐ろしいので、sscanfは好きではありません。私は賢くなり、C ++標準ライブラリのいくつかの最新の部分を使用したいと思います。代わりに何を使うべきですか?
解決
std :: stringstream
を試してください。
#include <sstream>
...
std::stringstream s("123 456 789");
int a, b, c;
s >> a >> b >> c;
他のヒント
ほとんどのジョブでは、標準ストリームが完全にジョブを実行します。
std::string data = "AraK 22 4.0";
std::stringstream convertor(data);
std::string name;
int age;
double gpa;
convertor >> name >> age >> gpa;
if(convertor.fail() == true)
{
// if the data string is not well-formatted do what ever you want here
}
より複雑な解析のためのより強力なツールが必要な場合は、RegexまたはBoostのSpiritを検討することもできます。
sstream
を含めると、文字列のストリームを提供するstringstreamクラスにアクセスできます。これは必要なものです。 Roguewaveには、いくつかの優れた使用方法の例があります。 。
本当にストリームを使用したくない場合(読みやすさのために良い)、使用できます StringPrintf。
その実装はFollyにあります:
https://github.com/facebook/folly/ blob / master / folly / String.h#L165
fgetsまたはstrtol
所属していません StackOverflow