本文来自于c++标准库文件,所有示例均在Visual Studio17版本上验证通过;
表示一个可变成字符串;
常见构造写法
string str("123456");
string str1("1234567", 4);
string str2("1234567", 2, 4);
string str3(10,'A');
string str4;
常见成员函数
1. 拼接("+="和append)
string str("abc");
str.append("de");
str += "fg";
string s1("abc");
string s2 = "def";
string s3 = s1 + s2;
string s4 = s1 + "and" + s2;
string s6 = "AB" + s1 + "DE";
结论:两个字符串不能挨着相加;
2. assign
作用:对string对象赋值, 返回对象自身的引用;
string str("abc");
str.assign(10, 'A');
str.assign("hello");
str.assign("hello", 4 );
str.assign("hello",2,3);
string str1;
str1.assign(str);
str1.assign(str,2,4);
3. at
作用: 返回偏移量所在的引用(或const 引用);
string str("1234567");
auto ret = str.at(3);
cout << ret << " " << str.c_str() << endl;
4. back()
作用:返回最后一个元素的引用(或const引用);
string str("1234567");
auto ret = str.back();
cout << ret << " " << str.c_str() << endl;
5. begin()
作用:返回开头的迭代器(或const迭代器);
string str("1234567");
string::iterator iter = str.begin();
cout << *iter<< endl;
6. end()
作用: 返回最后一个元素的后一个位置的迭代器(或const迭代器)
string str("1234567");
string::iterator iter = str.end();
cout << *(iter-1) << endl;
7. cbegin()
作用:等同于begin的const版本;返回开始位置的const迭代器;
string str("1234567");
string::const_iterator b = str.cbegin();
cout << "const cbegin = " << *b << endl;
8.cend ()
作用:等同于end()的const版本;返回最后一个元素所在位置下一位置的迭代器;
string::const_iterator e = str.cend();
cout << "iter cend = " << *(e-1) << endl;
9. capacity()
作用:返回已分配存储的当前长度;
string str("1234567");
cout << "capacity = " << str.capacity() << endl;
10. clear()
作用: 擦除(清空)
string str("1234567");
str.clear();
str += "clear";
11. compare
作用:比较字符串; 返回值: (1) 小于0,当前字符串小; (2) 等于0,两个字符串相同; (3) 大于0,当前字符串大;
string str("1234567");
int com = str.compare("12345678");
com = str.compare("1234567");
com = str.compare("123456");
com = str.compare(0, 3, "1ab456");
com = str.compare(0, 3, "112456",0,3);
12. copy
string str("1234567");
char ptr[16] = {0};
int retcopy = str.copy(ptr,5,0);
cout <<"cppy=" << retcopy << " " << str.c_str() << " "<< ptr << endl;
13. crbegin() 和 crend()
作用:crbegin 返回const反向开始位置迭代器;也就是正向最后一个元素位置; crend 返回const反向结束位置下一位置迭代器; 也就是正向开始元素前一个位置;
string str("1234567");
string::const_reverse_iterator iterrb = str.crbegin();
cout << *iterrb << endl;
string::const_reverse_iterator iterre = str.crend();
cout << *(iterre-1) << endl;
14. c_str() 和 data()
string str("1234567");
cout << str.c_str() << endl;
cout << str.data() << endl;
15. erase
作用:擦除指定区间/位置的元素;
string s1("1234567");
s1.erase(2);
cout << s1.c_str() << endl;
string s2("1234567");
s2.erase(2,4);
cout << s2.c_str() << endl;
string s3("1234567");
string::const_iterator ib = s3.begin();
s3.erase(ib);
cout << s3.c_str() << endl;
string s4("1234567");
string::const_iterator ib1 = s4.begin();
string::const_iterator ie1 = ib1 + 4;
s4.erase(ib1,ie1);
cout << s4.c_str() << endl;
16. empty()
作用:测试string对象是否为空;
string str;
if (str.empty()) {
cout << "str is empty" << endl;
}else {
cout << "str no empty" << endl;
}
17. find
作用:从开始位置开始查找某一字符或字符串;成功返回出现的位置,失败返回-1;
string str("1234567");
int ret = str.find('5',3);
ret = str.find("34", 0);
ret = str.find("3456", 1, 2);
string s("34");
ret = str.find(s,1);
18. find_first_of
作用:查找string串中任意一个字符;
string str("1234567");
int ret = str.find_first_of('5',2);
ret = str.find_first_of("856",2);
ret = str.find_first_of("8256", 2, 2);
string s1("45");
ret = str.find_first_of(s1, 2);
19. find_first_not_of
作用:查找string中任意字符,找到元素不相等的位置即返回;
string str("1234567");
int ret = str.find_first_not_of('4', 1);
ret = str.find_first_not_of("56", 2);
ret = str.find_first_not_of("2345", 1, 2);
string s1("34");
ret = str.find_first_not_of(s1, 2);
20. find_last_of
作用:从偏移量位置开始反向查找子串字符(或子串)出现的位置;
string str("12345671234567");
int ret = str.find_last_of('4', 13);
ret = str.find_last_of("64", 13);
ret = str.find_last_of("1234", 13, 2);
string s1("34");
ret = str.find_last_of(s1, 8);
21. find_last_not_of
作用:从偏移位置开始反向查找第一个不属于子串任何字符的位置,成功返回该位置,失败-1;
string str("12345671234567");
int ret = str.find_last_not_of('5');
ret = str.find_last_not_of("34", 10);
ret = str.find_last_not_of("345", 4, 2);
string s("45");
ret = str.find_last_not_of(s, 4);
22. front()
作用: 返回第一个元素的引用;
string str("hello");
auto &s = str.front();
23. insert
作用:在指定位置插入值;
string str("hello");
str.insert(str.cbegin(), 'h');
string str("hello");
str.insert(str.cbegin(), 2, 'h');
string str("hello");
str.insert(5, 2, 'b');
string str("hello");
str.insert(0, "add");
string str("hello");
str.insert(5, "world", 2);
string str("hello");
string s("world");
str.insert(5, s, 2, 3);
string str("hello");
string s("world");
str.insert(5, s);
string str("hello");
string s("world");
str.insert(str.cbegin(), s.begin(), s.end());
24. length
作用:返回序列的长度,不包含’\0’;
string str("hello");
cout << str.size() << endl;
cout << str.length() << endl;
25. max_size()
作用:返回序列最大可能的大小;
26. =,+=,[ ]
string str("hello");
str += "world";
str = "insert";
cout << str.c_str() << endl;
for (int i = 0; i < str.length(); i++) {
printf(" str[%d] = %c \n",i, str[i]);
}
27 push_back,pop_back
作用:添加一个字符/移除最后一个字符;
string str("hello");
str.push_back('a');
str.pop_back();
str.pop_back();
28. rbegin,rend();
作用:返回反向迭代器开始/结束位置
string str("hello");
string::reverse_iterator riterb = str.rbegin();
cout<< *riterb << endl;
string::reverse_iterator ritere = str.rend();
cout << *(ritere-1) << endl;
29. replace
string str("hello");
string s("world");
str.replace(str.begin(), str.begin() + 2, s.begin(), s.begin() + 2);
cout << str.c_str() << endl;
str.replace(str.begin(), str.begin() + 2, 2, 'w');
cout << str.c_str() << endl;
str.replace(str.begin(), str.begin() + 2, "wo");
cout << str.c_str() << endl;
str.replace(str.begin(), str.begin() + 2, "replace", 2);
cout << str.c_str() << endl;
string s1("he");
str.replace(str.begin(), str.begin() + 2, s1);
cout << str.c_str() << endl;
str.replace(1, 3, 2, 'a');
cout << str.c_str() << endl;
str.replace(2, 3, "hello");
cout << str.c_str() << endl;
str.replace(2, 3, "hello", 2);
cout << str.c_str() << endl;
str.replace(2, 3, s, 0, 2);
cout << str.c_str() << endl;
str.replace(2, 3, s);
cout << str.c_str() << endl;
30. reserve
决定存储分配的最小长度,影响capacity;string内存分配按照:(n*16-1)分配
string str("hello");
string s("world");
str.reserve(20);
31. resize
决定新长度,根据需要使用_Ch元素填充;
string str("hello");
str.resize(2);
cout << str.length() << " "<< str.c_str() << endl;
str.resize(12, 'a');
cout << str.length() << " " << str.c_str() << endl;
32. rfind
string str("hello");
int ret = str.rfind('e', 3);
ret = str.rfind("lo", 3);
ret = str.rfind("llo", 5, 2);
string s("lo");
ret = str.rfind(s, 5);
33. substr
作用: 查找子串
string str("hello");
string s = str.substr(1, 3);
cout << s.c_str() << endl;
|