問題タブ [istringstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 改行付きのistringsteam
さて、文字列 s =" 1 2 3" がある場合、それを読みました
我々はできる :
次のようなテキスト ファイルがあるとします。
テスト
1 100 ミリ秒
テスト
2 200 ミリ秒
テスト
3 300 ミリ秒
c++ - QFile を使用して istringstream をバイナリ入力として作成 (libpng 用)
Qt リソースから png を読み取るために libpng を使用しようとしています。問題点: 読み取りを行うクラスには、Qt の依存関係があってはなりません。
最初のステップで、 http://www.piko3d.net/tutorials/libpng-tutorial-loading-png-files-from-streams/#CustomReadを読んで、私はすでに関数を書くことに成功しました
地味な昔ながらのifstreamを渡すことにも成功しました
read_png(..)に変更し、png を正常に読み取らせます。しかし、Qt リソースから (できればプラットフォームに依存しない) istream を取得するにはどうすればよいでしょうか? パフォーマンスは大きな問題ではないので、最初に思いついた
実際、これは、一見すると良さそうに見える iss を生成します。
私は得る
ただし、空白の問題があるようです。為に
収量
後者は機能しますが、前者のバリエーションは最終的に libpng チェック関数png_sig_cmp(..)を導き、私の png を無効として拒否します。私の最初の反射は「バイナリ」についてです。でも:
- istringstream iss(std::stringstream::in | std::stringstream::binary); 正しいと感じます。
- QIODevice::ReadOnly にはバイナリ パートナーがないようです。
私が見逃したものが見えますか?
c++ - 不要な空白のスキップ
これを使用して入力を読み取ります。
入力行は" #text Markup used in this document is compatible with "
、引用符なしで次のようになります
私が達成したいのは、コード変数データの後に含まれることです"Markup used in this document is compatible with "
しかし、代わりに、このコードは、Markup
空白をスキップしたくないと指定した後でも、単語の後にすべてを無視しますnoskipws
c++ - istringstream オブジェクトの再設定
このコードを実行すると:
istreamstream (iss) は、すべての反復で同じままです。(ファイルは、プログラムの開始時にベクトルに読み込まれます。はい、配列に対応するデータがあることを確認しました。)
つまり、次の出力が得られます。
一方、ファイル/ベクターは実際には次のように言っています:
さまざまなトレースを試しましたが、問題を特定できません。ありがとう!
c++ - stringteam を使用したメモリ内の範囲外の問題
初めて stringstream を使い始めたばかりで、コンセプトは気に入っていますが、stringstream 関数でメモリ内の範囲外を正確に見つけるのに苦労しています。
私の関数は、たとえば、「N02550 G3 X16.7379 Y51.7040 R0.0115」などの文字列を受け取ります。これは、私の職場の CNC マシンのマシン コードです。X、Z、Y が隣にある文字列を見つけるために、文字列を stringstream に渡します。これらは座標です。次に、浮動小数点数を私の構造体「座標」に保存するために、最初に文字を取り除きます(x、y、zの3つの倍精度があります)。
この 33 行のマシン コードを含むテキスト ファイルを実行すると、私のプログラムは動作します。718 行のマシン コードで実行すると、718 になり、範囲外のメモリでクラッシュします。次に、別の奇妙な部分は、118,000 行のマシン コードを実行すると、約 22,000 行になり、クラッシュすることです。そのため、なぜそれができるのか、何が問題の原因なのかを理解するのに苦労しています。
関数は次のとおりです。
アプリケーション全体を確認したい場合 (アプリケーションは十分に文書化されています)、マシンコードを含む txt ファイルが必要かどうかを尋ねてください。ありがとうございました!
c++ - C++ - 標準入力から可変数の整数を n 回取得する
次のプログラムのループが正確に testCount 回実行されない理由がわかりません。それを正しくするのを手伝ってください。
c++ - istringstrem クラスでの peek() の動作
peek メソッドに関する多くの質問を見ましたが、私の質問は、ほとんど明白であるにもかかわらず (私が思うに) 興味深いトピックに関するものです。
読み取るバイナリ ファイルがあり、それをプログラム メモリ内で全体として表示し、読み取りを実行するために istringstream オブジェクトを使用することを選択したとします。
たとえば、ストリーム内の特定のバイトの位置を検索している場合、ハードディスクに繰り返しアクセスすると、時間とリソースが無駄になります...
ただし、istringstream オブジェクトを作成すると、最終的な NULL バイトはすべて EOF シグナルとして扱われます。
少なくとも、これは次の短いコードで私に起こったことです:
このコードは g++ 4.9 でも clang 3.5 でも動作しません。その null バイトがビットを設定するためbuffer
、一致sample
が見つかる前に内部に null バイトが存在するという仮説では機能しません。eof
だから私の質問は次のとおりです:この種のアプローチはまったく避けるべきですか、それともpeek
ヌルバイトが「必然的に」ストリームの終わりではないことを教える方法がありますか?
c++ - CPP : 文字列ストリームの解析が遅すぎる
私の cpp コードは、スペースで区切られた float 値の 7 MB のテキスト ファイルを読み取る必要があります。文字列値を float 配列に解析するのに約 6 秒かかりますが、これは私のユース ケースには多すぎます。
私はオンラインでチェックしてきましたが、通常、時間がかかるのは物理 IO であると人々は言います。これを解消するために、ファイルを一発で文字列ストリームに読み込み、これを float 解析に使用しています。コード速度の改善はまだありません。より速く実行する方法はありますか?
これが私のコードです(簡単にするために、配列エントリを dummy_f に置き換えました):
編集:
test_cases.txt ファイルへのリンクは次のとおりですhttps://drive.google.com/file/d/0BzHKbgLzf282N0NBamZ1VW5QeFE/view?usp=sharing
このファイルで実行する場合は、内側のループの次元を 128 に変更してください (入力ミス)。
編集:それを機能させる方法を見つけました。dummy_f を文字列として宣言し、stringstream から文字列ワードとして読み取ります。次に、atof を使用して文字列を float に変換しました。かかった時間は0.4秒で、私には十分です。