c++ - 标准模板字符串类 : string. fill()

标签 c++ string

我需要一种方法来创建一个包含 n 个字符的字符串。在这种情况下,ascii 值为零。

我知道我可以通过调用构造函数来做到这一点:

字符串 sTemp(125000, 'a');

但我想在很多地方重用 sTemp 并用不同的长度填充它。

我正在调用一个以字符串指针和长度作为参数并用字节填充字符串的库。 (我知道从技术上讲,字符串不是连续的,但就所有意图和目的而言,它是连续的,并且很快就会成为标准)。我不想使用 vector 。

有没有什么巧妙的方法可以在创建字符串后再次调用构造函数?

最佳答案

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 );

引用来源:cplusplus.com (我推荐这个网站,因为它为您提供了 C++ 标准库的详细引用。)

我认为您正在寻找类似于这些函数中的第五个函数的东西:n 指定字符串的所需长度,c 指定填充到该字符串中的字符。例如,如果你写

sTemp.assign(10, 'b');

您的字符串将只填充 10 个 b。

我最初建议使用 STL 算法 std::fill 但因此您的字符串长度保持不变。 string::resize 方法提供了一种更改字符串大小并用给定值填充附加字符的方法——但仅设置附加字符。最后,string::assign 仍然是最好的方法!

关于c++ - 标准模板字符串类 : string. fill(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1576460/

相关文章:

java - 检查字符串是否包含特殊字符

c++ - 为什么 Qt 不应用这个样式表类型选择器?

c - 为什么在并行子进程之间 fork 两次后 pipe() 不工作?

c++ - 对象组合促进代码重用。 (T/F,为什么)

c++ - 使用 std::unique_ptr 的具有私有(private)析构函数的单例

javascript - indexOf ("-") 每次返回 - 1

c - *char 值在函数上改变

algorithm - 字符串平铺算法

c++ - 为什么我的指针不是 NULL?

c++ - 错误 : class template partial specialization contains a template parameter that cannot be deduced