問題タブ [stdstring]

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 投票する
10 に答える
26639 参照

c++ - std::fstream クラスが std::string を取らないのはなぜですか?

これは設計上の問題ではありませんが、そのように思えるかもしれません。(まあ、それは一種の設計上の問題です)。私が疑問に思っているのは、なぜ C++std::fstreamクラスがstd::stringコンストラクターまたはオープン メソッドで を使用しないのかということです。誰もがコード例が大好きなので:

これは、ファイルを操作するときに常に私を悩ませます。確かにC++ライブラリはstd::string可能な限り使用しますか?

0 投票する
20 に答える
530365 参照

c++ - C++ で文字列に int を追加するにはどうすればよいですか?

印刷してほしいPlayer 4です。

上記は明らかに間違っていますが、私がここでやろうとしていることを示しています。これを行う簡単な方法はありますか、それとも新しいインクルードの追加を開始する必要がありますか?

0 投票する
7 に答える
39443 参照

c++ - C++: fprintf の結果を sprintf なしで std::string として取得する方法

私は、C++ で実装されたオープンソースの UNIX ツールを使用しています。コードを変更して、必要な機能を実行させる必要があります。私のパッチがアップストリームに受け入れられることを期待して、可能な限り小さな変更を加えたいと思います。標準 C++ で実装可能で、外部依存関係をさらに作成しないソリューションが優先されます。

これが私の問題です。私はC++クラスを持っています-それを「A」と呼びましょう-現在、fprintf()を使用して、その非常にフォーマットされたデータ構造をファイルポインターに出力します。その印刷関数では、複数のメンバー クラス ("B" は例) の同一に定義された印刷関数も再帰的に呼び出します。A のインスタンスの print() 結果に設定する必要があるメンバー std::string "foo" を持つ別のクラス C があります。これは、A の to_str() メンバー関数と考えてください。

擬似コード:

C はかなり安定していますが、A と B (および A の依存関係の残りの部分) は流動的な状態にあるため、必要なコードの変更が少ないほど良いことを述べておく必要があります。現在の print(FILE* F) インターフェイスも保持する必要があります。A::to_str() を実装するためのいくつかのアプローチを検討しましたが、それぞれに長所と短所があります。

  1. fprintf() の呼び出しを sprintf() に変更します。

    • フォーマット文字列を書き直す必要はありません
    • print() は次のように再実装できます: fprint(f, this.to_str());
    • しかし、char[] を手動で割り当て、多くの c 文字列をマージし、最後に文字配列を std::string に変換する必要があります。
  2. 文字列ストリームで a.print() の結果をキャッチしてみてください

    • すべてのフォーマット文字列を << 出力フォーマットに変換する必要があります。変換する何百もの fprintf() があります:-{
    • UNIXファイルハンドルから出力ストリームを作成するための標準的な方法を私が知っているわけではないため、print()を書き直す必要があります(この人はそれが可能かもしれないと言いますが)。
  3. Boost の文字列フォーマット ライブラリを使用する

    • より多くの外部依存関係。うん。
    • Format の構文は printf() とはかなり異なり、面倒です。

    printf(format_str, args) -> cout << boost::format(format_str) % arg1 % arg2 % など

  4. Qt のQString::asprintf()を使用する

    • 別の外部依存関係。

それで、考えられるすべてのオプションを使い果たしましたか?もしそうなら、どれが私の最善の策だと思いますか? そうでない場合、私は何を見落としましたか?

ありがとう。

0 投票する
8 に答える
18496 参照

c++ - C++ 文字列: UTF-8 または 16 ビット エンコーディング?

私はまだ、(ホーム) プロジェクトでUTF-8文字列 (必要に応じて追加の UTF-8 固有の関数を使用して std::string で実装) を使用するか、16 ビット文字列 (std: として実装) を使用するかを決定しようとしています。 :wstring)。このプロジェクトは、プログラミング言語と環境です (VB のように、両方を組み合わせたものです)。

いくつかの希望/制約があります:

  • メモリが限られているコンピュータなど、限られたハードウェアで実行できれば素晴らしいと思います。
  • Windows、Mac、および (リソースが許せば) Linux でコードを実行したいと考えています。
  • GUI レイヤーとしてwxWidgetsを使用しますが、そのツールキットと対話するコードをコードベースの隅に閉じ込めたいと考えています (非 GUI 実行可能ファイルを用意します)。
  • ユーザーに表示されるテキストとアプリケーションのデータを操作するときに、2 つの異なる種類の文字列を操作することは避けたいと思います。

現在、必要な場合にのみ UTF-8 操作関数を使用する目的で、std::string を使用しています。必要なメモリが少なくて済み、とにかく多くのアプリケーションが進んでいるようです。

16 ビット エンコーディングを推奨する場合、UTF-16はどれですか? UCS-2 ? もう一つ?

0 投票する
11 に答える
48883 参照

c++ - null が埋め込まれた std::string をどのように作成しますか?

次のような行で std::string を作成したい場合:

結果の文字列 (a、null、b) に 3 つの文字を含めたい場合、1 つだけ取得します。適切な構文は何ですか?

0 投票する
7 に答える
10718 参照

c++ - std::string使用時のbad_allocエラー

私は現在、ファイルへのパスを提供することに依存するプロジェクトに取り組んでいます(例C:\Path.pth)。さて、昨日は次の電話をかけてすべてが機能std::stringしました。

しかし、今では機能しません。をスローしbad_allocます。' \'文字が問題のようです。\x5C代わりにASCII値として使用してみましたが、同じ結果になりました。

#defineさて、私の質問は、これを引き起こした可能性のあるいくつかの、いくつかのコンパイラオプション、または他の「非コード」を台無しにした可能性がありますか?VS2005を使用しています。

どんな助けでも大歓迎です


PierreBdR

..それは非常にありそうに聞こえます。または少なくとも、それは:Pする必要があります

ある種の/SetStringCharSize:2bit-compilerオプションについては誰も言及していないので、私のコードはどこかで何かを台無しにする必要があり、間違っているのは単なる愚かなコンパイラオプション(または同様のもの)ではないと考えるのが安全だと思います。 。

0 投票する
9 に答える
3395 参照

c++ - if(str1==str2) 対 if(str1.length()==str2.length() && str1==str2)

別のコードで 2 番目のものを見たことがありますが、この長さの比較はコードの生産性を高めるために行われたと思います。特定の辞書を持つスクリプト言語のパーサーで使用されました。単語は 4 ~ 24 文字で平均 7 ~ 8 文字で、アルファベットには 26 文字のラテン文字と "@"、"$"、"_" が含まれます。

長さの比較は、STL 文字列を操作する == 演算子をエスケープするために使用されました。これには、単純な整数比較よりも明らかに時間がかかります。しかし同時に、与えられた辞書の最初の文字の分布は単語サイズの分布より単純に広いため、文字列を比較する際の最初の 2 文字は、通常、その文字列のサイズよりも異なることがよくあります。これにより、長さの比較が不要になります。

私はいくつかのテストを実行しましたが、それが私が見つけたものです.2つのランダムな文字列の比較を何百万回もテストしていますが、2番目の方法ははるかに高速であるため、長さの比較が役立つようです. しかし、実際のプロジェクトでは、デバッグ モードではさらに遅くなり、リリース モードでは不十分なほど速くなります。

だから、私の質問は、なぜ長さの比較が比較を速くすることができ、なぜそれを遅くすることができるのですか?

UPD: 私はその 2 番目の方法も好きではありませんが、それには理由があると思います。

UPD2: 真剣に、問題は最善を尽くす方法ではありません。この場合、STL 文字列はもう使用していません。長さの比較が不必要で間違っていることなども不思議ではありません。これはどのように可能ですか?

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

c++ - C++ std::string コンストラクター

これに関するご意見をいただければ幸いです。

これら 2 つの文字列は独立していると思います。つまり、", world" を s2 に追加しても、s1 は "hello" と読みます。これは私が Windows と Linux で見つけたものですが、HP_UX マシンでコードを実行すると、s2 と s1 は同じ文字列のように見えるため、s2 を変更すると s1 が変更されます。

これは絶対にクレイジーに聞こえますか?似たようなものを見た人はいますか?

0 投票する
24 に答える
734927 参照

c++ - How to concatenate a std::string and an int

I thought this would be really simple, but it's presenting some difficulties. If I have

How do I combine them to get a single string "John21"?

0 投票する
8 に答える
137095 参照

c++ - C++ 文字列を int に変換するにはどうすればよいですか?

重複の可能性:
C++ で文字列を int に解析する方法は?

C++ 文字列を int に変換するにはどうすればよいですか?

文字列に実際の数字 (「1」、「345」、「38944」など) が含まれていると想定しているとします。

また、boost がなく、古い C の方法ではなく、C++ の方法で実際に実行したいとします。