質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top