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. isinstance()の代わりに何を使うべきですか
- 2. LoadWithPartialName()の代わりに何を使うべきですか?
- 3. セッションの代わりに何を使うべきですか?
- 4. Perlでprintfの代わりに何を使うべきですか?
- 5. MongoDBのJoinの代わりに何を使うべきですか
- 6. VBAの代わりにPythonを使うべきですか?
- 7. Sqlalchemy bindparamの代わりにliteral_columnを使うべきですか?
- 8. エレメント "align"は時代遅れか非標準です:代わりに何を使うべきですか?
- 9. git pullの代わりに何を使うのですか
- 10. より安全で使いやすく柔軟なC++の代わりにsscanf()
- 11. Qt:QMatrixの代わりにどのクラスを行列に使うべきですか?
- 12. Python:いつos.popenの代わりにsubprocess.Popenを使うべきですか?
- 13. 辞書の代わりにいつnamedtupleを使うべきですか?
- 14. なぜjqueryの代わりにreactjsを使うべきですか?
- 15. なぜIPC/Simple websocketの代わりにgRPCを使うべきですか?
- 16. いつSQLiteの代わりにNSKeyedArchiverを使うべきですか?
- 17. Arguments.calleeは推奨されていません - 代わりに何を使うべきですか?
- 18. Google Image Search APIが動作しません。代わりに私は何を使うべきですか?
- 19. javascriptでletの代わりにvarを使う理由は何ですか?
- 20. urllib.request.urlretrieveの代わりに使用するコマンドは何ですか?
- 21. QPID Proton-Jはメッセンジャーを非難するが、代わりに何を使うべきか?
- 22. MappingJackson2HttpMessageConverter()の代わりに何のメッセージコンバータを使用できますか
- 23. QStringListの代わりに何を使用しますか?
- 24. OnActionExecutingの代わりに何を使用しますか? ASP.NET MVC
- 25. Android Gradle - compileOnlyの代わりに何を使用しますか?
- 26. GCMBaseIntentServiceの代わりに何を使用しますか?
- 27. Polymorphic Associationsの代わりに何を使用しますか?
- 28. CDebuggerTabクラスの代わりに何を使用しますか?
- 29. Rでattach()を使用することはお勧めできないのですが、代わりに何を使うべきですか?
- 30. data.tableを作成するのに、data.table()の代わりにsetDT()を使うべきですか?
はなぜ「賢い」であることを試してみてください。
あなたはフォリーでの実装を見つけることができますか? –
たとえば、彼は、sscanfはタイプセーフではないと言ったからです。 – jalf
@Kaleb Pederson:多くの英語の話者にとって、「賢い」とは単に「スマート」を意味するだけで、時には米国での否定的な意味合いを持ちません。 Ben Hymersは英国出身です。 – Naaff