我需要一種方法來創建一個n個字符的字符串。在這種情況下,ascii值爲零。標準模板字符串類:string.fill()
我知道我可以通過調用構造做到這一點:
串STEMP(125000, 'A');
但我想在很多地方重複使用sTemp,並用不同的長度填充它。
我正在調用一個庫,它將字符串指針和長度作爲參數,並用字節填充字符串。 (我知道技術上字符串不是連續的,但是對於所有的意圖和目的來說,它很快就會成爲標準)。我不想使用矢量。
是否有一些聰明的方法來創建字符串後再次調用構造函數?
我需要一種方法來創建一個n個字符的字符串。在這種情況下,ascii值爲零。標準模板字符串類:string.fill()
我知道我可以通過調用構造做到這一點:
串STEMP(125000, 'A');
但我想在很多地方重複使用sTemp,並用不同的長度填充它。
我正在調用一個庫,它將字符串指針和長度作爲參數,並用字節填充字符串。 (我知道技術上字符串不是連續的,但是對於所有的意圖和目的來說,它很快就會成爲標準)。我不想使用矢量。
是否有一些聰明的方法來創建字符串後再次調用構造函數?
string
類提供方法assign
爲給定字符串分配一個新值。該簽名是
1. string& assign (const string& str);
2. string& assign (const string& str, size_t pos, size_t n);
3. string& assign (const char* s, size_t n);
4. string& assign (const char* s);
5. string& assign (size_t n, char c);
6. template <class InputIterator>
string& assign (InputIterator first, InputIterator last);
引用來源:(我推薦這個網站,因爲它可以讓你的C++標準庫非常詳細說明參考)cplusplus.com
我認爲你在尋找類似的五分之一這些函數的功能如下:n
指定所需的字符串長度和c
字符填充到此字符串中。例如,如果你寫
sTemp.assign(10, 'b');
你的字符串將被完全填充10 b。
我最初建議使用STL算法std::fill
,但是因此您的字符串長度保持不變。方法string::resize
提供了一種方法來改變字符串的大小和填充給定值的附加字符 - 但只有附加的字符被設置。最後string::assign
保持最佳的方法!
嘗試使用:
sTemp.resize(newLength, 'a');
參考文獻:
void __CLR_OR_THIS_CALL resize(size_type _Newsize)
{ // determine new length, padding with null elements as needed
resize(_Newsize, _Elem());
}
void __CLR_OR_THIS_CALL resize(size_type _Newsize, _Elem _Ch)
{ // determine new length, padding with _Ch elements as needed
if (_Newsize <= _Mysize)
erase(_Newsize);
else
append(_Newsize - _Mysize, _Ch);
}
爲什麼反對投票?請留下至少一條評論。只有這樣,人們才能學習! – phlipsy 2009-10-16 07:06:05
我沒有downvote,但我不想要另一個#include如果可能 – 2009-10-16 07:15:10
正如你所看到的填充不好,因爲它不允許改變字符串的大小。調整大小僅使用初始字符來初始化字符串中的新字符(調整大小後)。原始的字符串保持不變。這些不符合「再次調用構造函數」的預期效果。正確的功能是分配。 – 2009-10-16 07:46:27