string 操作
交换内容 swap
std::basic_string<CharT,Traits,Allocator>::swap
void swap( basic_string& other ); (C++17 前)
交换 string 与 other
的内容。可能非法化所有迭代器和引用。
若 | (C++11 起) |
参数
other | - | 要与之交换内容的 string |
返回值
(无)
调用示例
// 交换内容
string str2 = "ABCDE GH";
str.swap(str2);
std::cout << "str swap: " << str << std::endl ;
std::cout << "str swap: " << str2 << std::endl << std::endl;
更改存储的字符数
std::basic_string<CharT,Traits,Allocator>::resize
void resize( size_type count ); (1)
void resize( size_type count, CharT ch ); (2)
重设 string 大小以含 count
个字符。
若当前大小小于 count
,则后附额外的字符。
若当前大小大于 count
,则缩减 string 到为其首 count
个元素。
第一版本初始化新字符为 CharT() ,第二版本初始化新字符为 ch
。
参数
count | - | string 的新大小 |
ch | - | 用以初始化新字符的字符 |
返回值
(无)
异常
若 count > max_size() 则为 std::length_error 。对应 Allocator
所抛的任何异常。
若因任何原因抛出异常,则此函数无效果(强异常保证)。 (C++11 起)
调用示例
str = str1;
// 更改存储的字符数
// 重设 string 大小以含 count 个字符。
str.resize(6);
std::cout << "str resize: " << str << std::endl ;
// 若当前大小小于 count ,则后附额外的字符。
// 若当前大小大于 count ,则缩减 string 到为其首 count 个元素。
str.resize(10, 'H');
std::cout << "str resize: " << str << std::endl << std::endl;
替换字符串的指定部分
std::basic_string<CharT,Traits,Allocator>::replace
以新字符串替换 [pos, pos + count)
或 [first, last)
所指示的 string 部分。
新字符串可以是下列之一:
1) string str
;
basic_string& replace( size_type pos, size_type count,
const basic_string& str ); (1)
basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str ); (1)
调用示例
// 1) string str
str = str1;
str.replace(1, 2, str2);
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2);
std::cout << "str replace: " << str << std::endl << std::endl;
2) str
的子串 [pos2, pos2 + count2)
,
除了若 count2==npos 或若它可能越过 str.size() ,则使用 [pos2, str.size())
。
basic_string& replace( size_type pos, size_type count,
const basic_string& str, size_type pos2, size_type count2 );
调用示例
// 2) str 的子串 [pos2, pos2 + count2) ,
// 除了若 count2==npos 或若它可能越过 str.size() ,则使用 [pos2, str.size()) 。
str = str1;
str.replace(1, 2, str2, 1, 2);
std::cout << "str replace: " << str << std::endl << std::endl;
3) 范围 [first2, last2)
中的字符。
若 | (C++11 前) |
此重载仅若 | (C++11 起) |
template< class InputIt >
basic_string& replace( const_iterator first, const_iterator last,
InputIt first2, InputIt last2 );
调用示例
// 3) 范围 [first2, last2) 中的字符。
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2.begin() + 1, str2.begin() + 3);
std::cout << "str replace: " << str << std::endl << std::endl;
4) 范围 [cstr, cstr + count2)
中的字符;
basic_string& replace( size_type pos, size_type count,
const CharT* cstr, size_type count2 );
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr, size_type count2 );
调用示例
// 4) 范围 [cstr, cstr + count2) 中的字符;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2.c_str(), 3);
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(0, 2, str2.c_str(), 3);
std::cout << "str replace: " << str << std::endl << std::endl;
5) 范围 [cstr, cstr + Traits::length(cstr))
中的字符;
basic_string& replace( size_type pos, size_type count,
const CharT* cstr );
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr );
调用示例
// 5) 范围 [cstr, cstr + Traits::length(cstr)) 中的字符;
str = str1;
str.replace(1, 2, str2.c_str());
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2.c_str());
std::cout << "str replace: " << str << std::endl << std::endl;
6) 字符 ch
的 count2
个副本;
basic_string& replace( size_type pos, size_type count,
size_type count2, CharT ch );
basic_string& replace( const_iterator first, const_iterator last,
size_type count2, CharT ch );
调用示例
// 6) 字符 ch 的 count2 个副本;
str = str1;
str.replace(1, 2, 6, 'H');
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, 6, 'H');
std::cout << "str replace: " << str << std::endl << std::endl;
7) initializer_list ilist
中的字符;
basic_string& replace( const_iterator first, const_iterator last,
std::initializer_list<CharT> ilist );
调用示例
// 7) initializer_list ilist 中的字符;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, {'H', 'I', 'J'});
std::cout << "str replace: " << str << std::endl ;
调用示例
string str = "abcdefg hijk";
string str1 = str;
// 交换内容
string str2 = "ABCDE GH";
str.swap(str2);
std::cout << "str swap: " << str << std::endl ;
std::cout << "str swap: " << str2 << std::endl << std::endl;
str = str1;
// 更改存储的字符数
// 重设 string 大小以含 count 个字符。
str.resize(6);
std::cout << "str resize: " << str << std::endl ;
// 若当前大小小于 count ,则后附额外的字符。
// 若当前大小大于 count ,则缩减 string 到为其首 count 个元素。
str.resize(10, 'H');
std::cout << "str resize: " << str << std::endl << std::endl;
// 替换字符串的指定部分
// 以新字符串替换 [pos, pos + count) 或 [first, last) 所指示的 string 部分。
// 1) string str
str = str1;
str.replace(1, 2, str2);
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2);
std::cout << "str replace: " << str << std::endl << std::endl;
// 2) str 的子串 [pos2, pos2 + count2) ,
// 除了若 count2==npos 或若它可能越过 str.size() ,则使用 [pos2, str.size()) 。
str = str1;
str.replace(1, 2, str2, 1, 2);
std::cout << "str replace: " << str << std::endl << std::endl;
// 3) 范围 [first2, last2) 中的字符。
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2.begin() + 1, str2.begin() + 3);
std::cout << "str replace: " << str << std::endl << std::endl;
// 4) 范围 [cstr, cstr + count2) 中的字符;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2.c_str(), 3);
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(0, 2, str2.c_str(), 3);
std::cout << "str replace: " << str << std::endl << std::endl;
// 5) 范围 [cstr, cstr + Traits::length(cstr)) 中的字符;
str = str1;
str.replace(1, 2, str2.c_str());
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, str2.c_str());
std::cout << "str replace: " << str << std::endl << std::endl;
// 6) 字符 ch 的 count2 个副本;
str = str1;
str.replace(1, 2, 6, 'H');
std::cout << "str replace: " << str << std::endl ;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, 6, 'H');
std::cout << "str replace: " << str << std::endl << std::endl;
// 7) initializer_list ilist 中的字符;
str = str1;
str.replace(str.begin() + 1, str.begin() + 3, {'H', 'I', 'J'});
std::cout << "str replace: " << str << std::endl ;