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