sscanfが(文字列から物を抽出する)問題を解決しました。私はsscanfが好きではありませんが、タイプセーフではありませんし、古いと恐ろしいです。私は賢明で、C++標準ライブラリの現代的な部分を使いたいと思っています。代わりに私は何を使うべきですか?sscanfの代わりに何を使うべきですか?
答えて
他の回答には欠点があります。質問はI/Oに関するものではなく、文字列からデータを抽出することです。
するTryにstringstream:
#include <sstream>
...
std::stringstream s("123 456 789");
int a, b, c;
s >> a >> b >> c;
cがそこにないかどうかを知る方法、例えば文字列は "123 456"でしたか? – unludo
@unludo:その場合、 'c'は変更されません。 'c'をデフォルト値で初期化することもできますし、より洗練された解析が必要になるかもしれません。トークナイザーが動作するでしょう。 –
C++ 11以降、 'c'は' 0'にリセットされ、その前に私はその失敗後の値が未定義であると信じています。とにかく、 'c'が存在するかどうかをチェックするには、ストリーム状態を使います(便宜上、' operator bool() 'から):if(s >> a >> b)if(s >> c)abc_there(); else ab_there();そうでなければdidnt_have_a_and_b(); '。 –
fgetsまたはstrtol
あなたがsstream
が含まれている場合、あなたは何が必要である、文字列のストリームを提供にstringstreamクラスにアクセスすることができます。 RogueWaveのは、ほとんどのジョブ標準ストリームのためにいくつかの良いexamples on how to use it.
では、より複雑な解析のために、より強力なツールが必要な場合は、その後、あなたはブーストから正規表現、あるいは精神を検討することもでき
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
}
、完璧に仕事をしています。
実際にストリームを使用したくない場合(可読性のために良いです)、 StringPrintfを使用できます。
https://github.com/facebook/folly/blob/master/folly/String.h#L165
素敵なコードです(私はすでに同じものを使っています)。しかし、 'sscanf'ではなく' printf'の代わりです。 –
- 1. LoadWithPartialName()の代わりに何を使うべきですか?
- 2. セッションの代わりに何を使うべきですか?
- 3. Perlでprintfの代わりに何を使うべきですか?
- 4. VBAの代わりにPythonを使うべきですか?
- 5. エレメント "align"は時代遅れか非標準です:代わりに何を使うべきですか?
- 6. より安全で使いやすく柔軟なC++の代わりにsscanf()
- 7. Qt:QMatrixの代わりにどのクラスを行列に使うべきですか?
- 8. 辞書の代わりにいつnamedtupleを使うべきですか?
- 9. いつSQLiteの代わりにNSKeyedArchiverを使うべきですか?
- 10. Arguments.calleeは推奨されていません - 代わりに何を使うべきですか?
- 11. urllib.request.urlretrieveの代わりに使用するコマンドは何ですか?
- 12. OnActionExecutingの代わりに何を使用しますか? ASP.NET MVC
- 13. Polymorphic Associationsの代わりに何を使用しますか?
- 14. Rでattach()を使用することはお勧めできないのですが、代わりに何を使うべきですか?
- 15. システムテストでSeleniumを使用するときにThread.Sleepを使用する代わりに何ができますか?
- 16. GETの代わりにオブジェクトを使う
- 17. Djangoの多くのフィールドの代わりに別のテーブルを使うべきでしょうか
- 18. WPFブラウザアプリケーションをASP.NETの代わりに使用できますか?
- 19. pseqの代わりにseqを使用できますか?
- 20. MockMvc(sprint-mvc-test)の代わりに何が使えますか?
- 21. std :: move()の代わりに何が使えますか?
- 22. NSWindow setFrame:.. animated:YES]関数をアニメーション化する代わりに、代わりにアニメーションを使用できますか?
- 23. composer.jsonの代わりに使うComposerオプション?
- 24. sun.jdbc.odbc.JdbcOdbcDriverの代わりに使用できますか?
- 25. CFURLDestroyResourceはiOS7で非推奨になりました。誰でも代わりに何を使うべきかを知っていますか?
- 26. いつstd :: thread :: spawnの代わりにstd :: thread :: Builderを使うべきですか?
- 27. PHP | public/private関数の代わりにpublic static/private static関数を使うべきですか?
- 28. AddPortの代わりに何を使用する必要がありますか?
- 29. com.google.appengine.repackaged *の代わりに何を使用する必要がありますか?
- 30. プレーンストリングの代わりにObjectIdを使用する利点は何ですか?
はなぜ「賢い」であることを試してみてください。
あなたはフォリーでの実装を見つけることができますか? –
たとえば、彼は、sscanfはタイプセーフではないと言ったからです。 – jalf
@Kaleb Pederson:多くの英語の話者にとって、「賢い」とは単に「スマート」を意味するだけで、時には米国での否定的な意味合いを持ちません。 Ben Hymersは英国出身です。 – Naaff