我試圖編寫一個具有「序列號」概念的函數。它有一個特定的長度。我希望通過創建一個名爲SerialNumber的新類型來簡化構造函數,該類型包裝了這個13字節數的概念。例如,我不想要一個產品(const char * m)或產品(const std :: string & str),它會截斷這個值並且是違反直覺的。它更喜歡產品(const SerialNumber & sn),我可以始終指望它是正確的長度。什麼是最好的方法來做到這一點?它應該是char [13]的typedef,還是有一種方法可以與字符串類一起使用?特定長度的C++字符串
1
A
回答
4
最簡單的方法是創建它接受一個的std :: string構造函數,然後你的構造函數中驗證長度確實是13.如果不是的話,簡單地拋出一個異常 - 這就是爲什麼它們的存在。請記住,char [13]不能保證字符串的長度爲13個字符,畢竟它可以是「hi」,後面是11個空終止符。
1
我不確定您的情況,但有一個選項仍然使用std :: string,但例如Product
的構造函數會在字符串長度錯誤時拋出。否則,最簡單的方法似乎是std::string
(或char[14]
,但我猶豫在C++代碼中使用C字符串)的包裝SerialNumber
類。
0
我會使用typedef char [13]或圍繞char [13]的包裝類。由於字符表與char *相同,因此如果需要,您將很容易將其轉換爲std :: string。
0
我會做類似下面
struct SerialNumber {
static bool TryCreate(const std::string& data, std::auto_ptr<SerialNumber>& ptr) {
if (data.length() != 13) {
ptr.reset();
return false;
} else {
ptr.reset(new SerialNumber(data.c_str()));
return true;
}
}
private:
SerialNumber(const char* data) {
memcpy(m_data, data, sizeof(data));
}
char m_data[13];
};
相關問題
- 1. C#檢查特定長度的數字字符串
- 2. RegEX字符串到特定長度
- 3. C#中固定長度的字符串
- 4. 在字符串中插入特定長度的特殊字符
- 5. C字符串長度
- 6. 數字符串長度c
- 7. 字符串的長度比字符串的長度長
- 8. Sed:搜索字符串長度和特定字符
- 9. 固定長度字符串的數字
- 10. 在MySQL中查詢特定長度的字符串字段
- 11. 獲取C++中字符串的長度
- 12. C#編輯字符串以添加特定長度的換行符
- 13. C字符串比定義長度短一個字符?
- 14. C++ stringstream將固定長度字符串讀入字符數組
- 15. 解析固定列寬度的可變長度字符串C#
- 16. C#:如何獲得字符串中的字符串的長度[]
- 17. 如何檢查字符串數組特定的單元格字符串長度?
- 18. 在特定長度中自動換行符字符串
- 19. C++字符串替換字符串的任意長度
- 20. 子串的特定字符後不同長度的
- 21. 拆分固定長度的字符串
- 22. 匹配恆定長度的字符串?
- 23. 確定MIPS32中字符串的長度
- 24. 字符串的固定長度排列
- 25. 確定字符串長度的問題
- 26. 將可變長度字符串分配給固定長度字符串
- 27. 從給定的字符串給定長度的字符的差異字符串
- 28. C++ while循環和字符串長度
- 29. C++字符串長度檢查
- 30. c#字符串長度事件
彷彿異常感覺太「永久」,你可以用它你可以在以後關閉斷言的替代品。 – 2011-04-06 20:39:49