「文字列」型は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でn文字の文字列を作成する最も速い方法
- 2. C#での文字列作成
- 3. 文字列のハッシュセットから文字の配列を作成する方法は?
- 4. Cの文字列配列から文字列を作成する簡単な方法はありますか?
- 5. データ型文字列とC#の文字列との比較
- 6. C++列挙型の文字列スイッチが動作しない
- 7. 文字列の操作方法は?
- 8. 文字列の配列からInputStreamを作成する方法
- 9. zendフレームワークでクエリ文字列を作成する方法は?
- 10. C++でカスタムCタイプの文字列クラスを作成する
- 11. C#文字列参照型ですか?
- 12. Cの文字の(半)動的配列を作成する方法
- 13. c配列の作成方法は?
- 14. 文字列型をJavaのクラス型に変換する方法
- 15. 文字列ビルダーまたは文字列クラスの文字列を作成する
- 16. chechboxのjson文字列の作成方法divテキストのチェック
- 17. xsltの文章で各文字列の最初の文字のリンクを作成する方法は?
- 18. C++での文字列のカスタム関数の作成
- 19. C++に返す型文字列のデータをコピーする方法は?
- 20. C#で型が文字列かどうかをチェックする方法は?
- 21. ルビーの列挙型を作成し、クエリ文字列から値を解析する方法は?
- 22. 文字列の構成はC#
- 23. Java:Unicodeで文字列を作る方法Normal Form C
- 24. 文字列を文字列に変換する方法hash_map(文字列、文字列、stringHashFunction>をLinuxでC++
- 25. 文字列の関数unordered_mapを作成する方法
- 26. C#での文字列操作
- 27. ループで長い文字列を作成する実行方法?
- 28. ポインタで作成された文字列をループする方法
- 29. C++文字列リテラルのデータ型は何ですか?
- 30. C++で文字列を作成する際のエラー
あなたは歴史的な詳細を意味しましたか?さもなければ@Daveの答えは正しい。 – iammilind
@In silico - より具体的には、文字配列の代わりに "文字列"を定義する方法を理解しようとしています。コンパイラは、実行時にstd :: stringを文字配列に変換しますか?最後に、そうでない場合は、どのようにメモリを割り当てますか? –
@Josh Bartholf:それをあなたの質問に編集して、より具体的な回答を得ることができます。 –