在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,則可以使用std :: wstring,它使用16位或32位字符串,並將char類型替換爲wchar_t類型。
- 通常有很多優化可供選擇。最近最受歡迎的是「短串」優化。
一旦你對C++比較適應,你應該嘗試編寫你自己的字符串類。這不是你在實踐中會用到的東西,但這對於圖書館寫作來說是一個很好的練習。
非常感謝您......這正是我想弄明白的。我想我會讓它變得更加複雜,然後我實際上不得不這樣做。 –
+1,這是一個很好的答案。只需使用'delete []'作爲字符數組。 – iammilind
糟糕!感謝您的支持。這很少見,我現在不得不處理手動內存分配。 –
通過編寫一個封裝了大量字符串函數的類,並重載了一堆運算符。
串真的是就像任何其他類:
string s = "hello"
是定義了equals操作者的過載:
string& operator= (const char* s);
例如。
這只是一個名爲「串」一類,像這樣:
class string
{
private:
//members
char* c;
public:
//methods
bool operator==(const string& other) const;
};
- 1. 如何爲下面的json字符串創建C#類模型?
- 2. 如何在java中創建新的字符串類型
- 3. 如何在張量流C api中創建一個字符串類型張量?
- 4. 在C++中創建一個自定義的C類型字符串類
- 5. 如何在TypeScript的類的原型上創建字符串
- 6. 從字符串創建匿名類型
- 7. 如何創建'字符串'類型的新字段?
- 8. 如何在C++中使用字符串修飾符創建新字符串?
- 9. 如何從JSON類型的字符串創建對象的字典類型
- 10. 如何在c中使用佔位符(%s)創建字符串
- 11. 如何在我的C#字符串中創建回車符
- 12. 在C#中創建Html.ActionLink字符串
- 13. 如何在python中創建一個字符串字符串
- 14. C++:創建字符串
- 15. 如何防止getExternalFilesDir(字符串類型)從創建目錄
- 16. C:創建字符串中存在的字符和字符
- 17. 在c#中從字符串列表中動態創建類
- 18. 從字符串創建類
- 19. 如何創建字符串
- 20. 如何創建字符串
- 21. 創建一個類型在字符串參數中的對象
- 22. 如何在模型中創建字符串列表:Extjs
- 23. C#如何用交錯數組創建字符串類型索引
- 24. 如何創建使用字符串類型行爲進行創建的對象?
- 25. 如何讀取類型「IBuffer」的值在c#中的字符串?
- 26. 在C中創建一個字符串類的新時刻#
- 27. 如何在.ps1文件中創建C#字符串對象
- 28. 如何在C中創建一個字符串的md5散列?
- 29. 如何在C中創建自己的字符串函數?
- 30. 如何在Visual C++中創建原始字符串?
你的意思是歷史細節?否則@戴夫的答案是正確的。 – iammilind
@In silico - 更具體地說,我想弄清楚如何替代字符數組,可以定義一個「字符串」。編譯器在運行時是否將std :: string轉換爲字符數組?最後,如果不是,它如何分配內存? –
@Josh Bartholf:你應該把它編輯成你的問題,這樣你可以得到更具體的答案。 –