27

sscanfが解決する(文字列から物を抽出する)という問題があります。sscanfはタイプセーフではなく、古くて恐ろしいので、私は好きではありません。私は賢くなり、C++標準ライブラリのより新しい部分を使用したいと思っています。代わりに何を使用すればよいですか?

4

5 に答える 5

40

試してみてくださいstd::stringstream

#include <sstream>

...

std::stringstream s("123 456 789");
int a, b, c;
s >> a >> b >> c;
于 2009-06-23T15:22:09.587 に答える
7

ほとんどのジョブでは、標準ストリームがそのジョブを完全に実行します。

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を検討することもできます。

于 2009-06-23T23:03:11.580 に答える
2

含めるsstreamと、文字列のストリームを提供するstringstreamクラスにアクセスできるようになります。これが必要です。Roguewaveには、その使用方法に関するいくつかの良い例があります。

于 2009-06-23T15:23:11.147 に答える
0

本当にストリームを使用したくない場合(読みやすさの点で優れています)、StringPrintfを使用できます。

その実装はFollyにあります。

https://github.com/facebook/folly/blob/master/folly/String.h#L165

于 2013-08-07T19:12:44.187 に答える
-1

fgetsまたはstrtol

于 2009-06-23T15:16:01.457 に答える