标准模板String类:string.fill()

时间:2009-10-16 06:39:23

标签: c++ string

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

我知道我可以通过调用构造函数来完成它:

string sTemp(125000,'a');

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

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

是否有一些聪明的方法在创建字符串后再次调用构造函数?

2 个答案:

答案 0 :(得分:12)

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仍然是最好的方法!

答案 1 :(得分:3)

尝试使用:

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);
    }
相关问题