「文字列」型はC++でどのように作成されましたか? Cでは、文字列は文字配列ですが、C++ではどのように文字配列をC++で「文字列」に変換しましたか?C++での文字列型の作成方法は?
答えて
文字配列はまだそこにあります。文字配列はラップされたクラスだけです。
class String
{
private:
char* stringData;
public:
String(const char* str)
{
stringData = new char[strlen(str)+1];
strcpy(stringData, str);
}
~String() { delete[] stringData; }
String& operator += (const String& rhs)
{
char* newStringData = new char[strlen(rhs) + strlen(stringData) + 1];
strcpy(newStringData, stringData);
strcpy(newStringData + strlen(stringData), rhs);
delete[] stringData;
stringData = newStringData;
return *this;
}
};
これは明らかに非常に不完全な例ですが、そのアイデアは正しいでしょうか?
std :: stringの実際の実装はかなり包括的ですが、自分でできないものは何もありません。ここで私は投稿何から公式のstd :: stringクラスにいくつかの違いがあります:あなたは長さを見つけるためにはstrlenを呼び出して維持する必要はありませんので、
- 文字列の長さは、通常は、メンバ変数として含まれています。
- std :: stringクラスはテンプレートを使用するため、char型に限定されません。 Unicodeを使用している場合は、char型をwchar_t型に置き換えて、16ビットまたは32ビットの文字列を使用するstd :: wstringを使用できます。
- 通常、多くの最適化を選択できます。最近、最も人気のあるものは「短い文字列」の最適化です。
C++に比較的慣れたら、独自の文字列クラスを作成してください。あなたが実際に使用するものではありませんが、図書館執筆には本当に良い演習です。それは、文字列 'という名前だけのクラスです
ありがとうございました...これは私が理解しようとしていたものです。私は実際にはもっと複雑にしていたと思う。 –
+1、それは良い答えです。文字配列に 'delete []'を使うだけです。 – iammilind
おっと!それをキャッチするためにありがとう。最近は、手動でメモリを割り当てる必要があります。 –
多くの文字列関数をカプセル化したクラスを作成し、多数の演算子をオーバーロードすることによって、
string s = "hello"
が定義された等号演算子のオーバーロードである:例えば
string& operator= (const char* s);
文字列が本当に他のどのような単なるクラスです。
、このような何か:
class string
{
private:
//members
char* c;
public:
//methods
bool operator==(const string& other) const;
};
- 1. C文字列の配列を作成する方法は?
- 2. C++で列挙型から文字列を返す方法は?
- 3. Cでn文字の文字列を作成する最も速い方法
- 4. C#での文字列作成
- 5. C# - 変数の変換方法は? (文字列、int型など)
- 6. C++例外の文字列の作成
- 7. Cで文字(文字列)の書式付き配列を作成する方法は?
- 8. 文字列のハッシュセットから文字の配列を作成する方法は?
- 9. Cの文字列配列から文字列を作成する簡単な方法はありますか?
- 10. 通常の文字列からJSON文字列を作成する方法は?
- 11. .ps1ファイル内にC#文字列オブジェクトを作成する方法
- 12. テンソルフローC言語で文字列型テンソルを作成するには?
- 13. データ型文字列とC#の文字列との比較
- 14. C++列挙型の文字列スイッチが動作しない
- 15. LINQの文字列から列挙型でフィルタリングする方法C#
- 16. C++で文字列を複数の型に解析する方法は?
- 17. cでの文字列と文字列の配列操作
- 18. C++でカスタムCタイプの文字列クラスを作成する
- 19. 文字列の操作方法は?
- 20. 文字列定数から文字配列を作成する方法は?
- 21. 文字列とint型連結のC++
- 22. C#文字列参照型ですか?
- 23. Laravelの文字列からURLを作成する方法は?
- 24. zendフレームワークでクエリ文字列を作成する方法は?
- 25. Cythonで(effienciently)文字列を作成する方法は?
- 26. ルートノードなしでXML文字列を作成する方法は?
- 27. 文字列内のC文字列ポインタがNULLで終了する方法は?
- 28. C#で文字列内の文字列を検索する方法は?
- 29. C#で文字列の前に文字列を取得する方法は?
- 30. Cの文字の(半)動的配列を作成する方法
あなたは歴史的な詳細を意味しましたか?さもなければ@Daveの答えは正しい。 – iammilind
@In silico - より具体的には、文字配列の代わりに "文字列"を定義する方法を理解しようとしています。コンパイラは、実行時にstd :: stringを文字配列に変換しますか?最後に、そうでない場合は、どのようにメモリを割り当てますか? –
@Josh Bartholf:それをあなたの質問に編集して、より具体的な回答を得ることができます。 –