問題タブ [stringstream]

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.

0 投票する
2 に答える
2398 参照

c++ - 文字列ストリームの抽出が機能しない

文字列ストリームからのデータの抽出に問題があるようです。抽出の開始時に最初の 2 文字が欠落しているようです。

次のコードに似たものがあります。

「ssnew」からデータを読み取るときに抽出演算子を使用すると、最初の 2 文字がスキップされるように見えるという問題があります。たとえば、デバッガーでは、stringstream に「001.111.62.2003... など」が含まれていることが示されています。ただし、最初の "ssnew >> bValid" の後、bValid は "true" になり、dValue は "0.111" になり、dTime は "0.62" になり、ストリームの最初の 2 つのゼロが無視されることを示します。ストリームの最初から開始しないのはなぜですか?

乾杯、セス

0 投票する
4 に答える
595 参照

c++ - なぜこの変換が機能しないのですか?

以下は私の機能です。私はそれを

RHS = "15\t// コメント"

v=15 で true を除き、false を返します。これを修正するにはどうすればよいですか?

0 投票する
5 に答える
176824 参照

c++ - stringstream、string、およびchar*変換の混乱

私の質問は要約すると、メモリ内のライブから返された文字列はどこにありstringstream.str().c_str()、なぜそれをに割り当てることができないのconst char*ですか?

このコード例は、私ができるよりもよく説明します

stringstream.str().c_str()に割り当てられる可能性のある仮定はconst char*、追跡するのに時間がかかったバグにつながりました。

coutボーナスポイントについては、ステートメントを次のように置き換える理由を誰かが説明できますか

文字列を正しく印刷しますか?

VisualStudio2008でコンパイルしています。

0 投票する
2 に答える
2688 参照

c++ - stringstream 一時的な ostream リターンの問題

次のセクションでロガーを作成しています。

するという考えで:

これはすべて意図したとおりに機能しますが、そうすると:

それは動作しません:

通常の正しい文字列ではなく、ジャンク データを含む 'format' になります。

これは、 << 演算子によって返された一時的な ostream が、元の文字列ストリームよりも長生きするためだと思います。

それとも私が間違っていますか?

(string() がこのように機能するのはなぜですか?それは、それ自体への参照を返すためですか?私はそう仮定しています。)

リリースモードでログインするときに追加の割り当てを排除するので、私は本当にこの方法でやりたいと思っています。

この方法でそれを行うための指針やコツは大歓迎です。私の実際のソリューションでは、さまざまなログ関数があり、それらはすべてこれよりも複雑です。したがって、これを何らかの方法で呼び出し元のコードに実装することをお勧めします。(可能であれば #define を変更しないでください)

アイデアを与えるために、私の実際の #defines の 1 つの例を示します。

これは、char*、string()、および ostream() を取る可変引数の printf のようなログ関数と、string()、exception()、および HRESULT を取る非可変引数関数に一致します。

0 投票する
2 に答える
2447 参照

c++ - コピーを作成せずに std::string からストリーミングしますか?

を受け取るリクエスト メソッドを持つネットワーク クライアントがありますstd::streambuf*。このメソッドは、データをネットワーク API に書き込む方法を知っているboost::iostreams::copyカスタム派生クラスにそれを渡すことによって実装されます。これはうまく機能します。std::streambufこれは、すべてのファイルをメモリに読み込む必要なく、ファイルをリクエストにストリーミングできることを意味します。

ただし、ファイルにない大きなデータ ブロックを送信する必要がある場合もあるため、文字列を受け取るオーバーロードを含めました。ストリーム内のすべてのネットワーク コードが重複しないようにするには、文字列を表す を設定してstreambuf、別のメソッドを呼び出す必要があることは明らかです。これを機能させるために私が見つけた唯一の方法は、次のようなものでした。

残念ながら、istringstream場合によっては数メガバイトのデータのコピーを作成します。もちろん、一般的なケースでは完全に理にかなっています。あるオブジェクトへの const 参照を渡す場合、そのオブジェクトがその参照を引き続き使用できると仮定して、そのオブジェクトを望まない場合です。

私はこれを次のように回避しました:

これはうまく機能しているように見えますが、本当に必要なのだろうか。std::istringstreamを受け取るオーバーロードがないのはなぜstd::string const *ですか? これを行うより良い方法はありますか?

0 投票する
1 に答える
999 参照

gcc - std::stringstream GCC の異常な動作

Mac (GCC 4.2) で短い小さなプログラムをコンパイルする際に、非常に興味深い問題があります。以下の関数は、char または文字列のみを stringstream にストリーミングしますが、それ以外 (int、double、float など) はストリーミングしません。実際、たとえば int を文字列に変換しようとすると、失敗フラグが設定されます。

_GLIBCXX_DEBUG=1ただし、デバッグ モードの XCode でデフォルトで設定されているプリプロセッサ フラグを削除すると、目的の結果/正しい動作が得られます。

これが私が話している単純な機能です。value は T 型のテンプレート変数です。int、double、float (動作しない)、char および string (動作する) についてテスト済みです。

私が間違っていること、なぜこれが機能しないのか、またはこれが機能しなくなるためにプリプロセッサフ​​ラグが何をするのかについてのアイデアはありますか?

ありがとう!

0 投票する
4 に答える
3471 参照

c++ - stringstream operator >>は関数として失敗しますが、インスタンスとして機能しますか?

私はファイルから名前とintのペアの束を抽出する簡単なコードを書いています。以下を使用する既存のコードを変更しています。

しかし、最初の2つの列が同じで、その後に他のデータが続く(無視される)別の(類似した)入力ファイルを使用したいと思います。だから私は書く:

しかし、これはコンパイルに失敗し、典型的なわいせつなstdlibテンプレートを吐き出します。

右。lineはstd::stringではありませんが、std :: basic_stringなどのバリエーションです。ただし、stringstreamの明示的なインスタンス化は機能します。

なんで?最初のケースの何が問題になっていますか?常に役立つcplusplus.comのサンプルbasic_ioが機能しますが、なぜ私のコードが機能しないのですか?

更新:別の参照ポイント:一時的な文字列ストリームは、抽出された最初の値が文字列ではなくintである場合に機能します。

0 投票する
1 に答える
214 参照

c++ - xmlファイルから整数へのwistringstream?

これはint、XML ファイルから を取り出してloadedGame.points(an int) に渡すために作成したコードです。ただし、これは機能しません。コンパイルされますが、正しい値が得られません。何故ですか? XMLDataNodeを操作するクラスですxmllite.dll

0 投票する
5 に答える
594 参照

c++ - Fstreamの一部をIstringstreamにコピーする

解決策をたくさん探した後、私は実際に助けを求めることにしました!

いくつかのブロックで構成されるファイルがあり、各ブロックは圧縮されている場合とされていない場合があります。各ブロックの前には、ブロックのサイズとブロックが圧縮されているかどうかが示されます。各ブロック内には、ブロックを識別する文字列があります。ブロック名を指定して、ファイルから関連するブロックを取得したいと思います。

私の最初の考えは、圧縮フラグとブロックのサイズを読み取り、ブロックだけをistringstreamに読み取り、必要に応じてistringstreamを解凍してから、ブロック名を検索することです。圧縮フラグとブロックのサイズを読み取ることはできますが、ファイルデータのブロックをistringstreamに読み込む方法がわかりません。人々がファイル全体をistringstreamに読み込んだ場所はわかりますが、各ブロックを解凍する必要がある場合とない場合があるため、これは行いたくありません。

私が見逃したアイデアや解決策へのリンクはありますか?または、より良いアルゴリズムはありますか?コメントありがとうございます。

0 投票する
2 に答える
4774 参照

c++ - リダイレクトされたcout->std:: stringstream、EOLが表示されない

std :: coutをstringstreamsにリダイレクトすることに関するたくさんの投稿を読みましたが、リダイレクトされた文字列の読み取りに問題があります。

最初の出力内の新しい行を選択する必要があります-それを行う方法について誰かが私に教えてもらえますか?

ありがとう。