本篇将讲述string类中的各种重要和常用函数(string()、begin()、rbegin()、cbegin()、crbegin()、end()、rend()、cend()、crend()、范围for、size()、resize()、capacity()、reserve()、clear()、empty()、append()、push_back()、insert()、erase()、replace()、swap()、find()、rfind()、substr()、compare())。
所有函数使用时应当包含头文件<string>。
如果对您有帮助还请多多点赞,要是文章有错误地方还请你在评论区留言指正。
一、string()
1.string (const char* s)
作用:创建一个string对象,并初始化为字符串s。
用法:
string s("Hello World");
2.string (size_t n, char c)
作用:创建一个string对象,并初始化为n个字符c。
用法:
string s(4, 'q');
3.string (const char* s, size_t n)
作用:创建一个string对象,并初始化为字符串s中的前 n个字符。
用法:
string s("Hello World", 5);
4.string (const string& str)
作用:创建一个string对象,初始化为对象str相同的字符串。
用法:
string str("Hello World");
string s(str);
5.string (const string& str, size_t pos, size_t len = npos)
作用:创建一个string对象,并初始化成从str的下表为pos开始(第pos个字符之后)的前len个字符。
用法:
string str("Hello World");
string s(str,6,5);
二、string& operator= ()
运算符重载
作用:可以将字符串,字符,或者一个string对象赋值给另一个string对象。
用法:
string s1, s2, s3;
string str("Hello World");
s1 = str;//string& operator= (const string& str);
s2 = "Hello";//string& operator= (const char* s);
s3 = 'Q';//string& operator= (char c);
cout << s1 << endl << s2 << endl << s3 << endl;
三、迭代器(Iterators)
1.begin()和 end()
iterator begin(); const_iterator begin() const;
作用:返回指向的字符串的第一个字符的迭代器。
用法:
string str("Hello World");
std::string::iterator it = str.begin();
cout << *it << endl;
iterator end(); const_iterator end() const;
作用:返回一个迭代器,该迭代器指向字符串的最后一个字符。
用法:一般与begin连着使用。
string str("Hello World");
std::string::iterator it = str.begin();
for (it; it != str.end(); it++)
{
cout << *it << ' ';
}
2.rbegin()和rend()
reverse_iterator rbegin(); const_reverse_iterator rbegin() const;
作用:返回一个反向迭代器,该迭代器指向字符串的最后一个字符(即其反向开头),反向迭代器是反向迭代的,增加它们会让它们向开头的地方移动。
reverse_iterator rend(); const_reverse_iterator rend() const;
作用:返回一个反向迭代器,该迭代器指向字符串第一个字符之前的理论元素(被视为其反向端)。
用法:rbegin()和rend()一般是联合使用的。
string str("Hello World");
std::string::reverse_iterator rit = str.rbegin();
for (rit; rit != str.rend(); rit++)
{
cout << *rit << ' ';
}
3.cbegin()和cend()
用法:与1中的begin()和end()用法类似 只是不能改变其指向的内容。
4.crbegin()和crend()
用法:与1中的rbegin()和rend()用法类似 只是不能改变其指向的内容。
5.范围for
作用:遍历一个整个字符串。
用法:
string str("Hello World");
for (auto ch:str)
{
cout << ch << ' ';
}
三、容量(Capacity)
1.size()
作用:返回字符串的长度(以字节为单位)。
用法:
string str("Hello World");
size_t i=str.size();
cout << i << endl;
2.resize()
作用:将字符串大小调整到n个字符的长度,如果原先的字符个数比n打则删除多余的保留前n个,如果比n小则用字符填补剩余位置使其达到n个字符,如果给定了字符c则在剩余位置填补字符c,如果没给定则填补空字符。
用法:
string s1("Hello World"), s2("Hello World"), s3("Hello World");
s1.resize(5);
s2.resize(15);
s3.resize(15, 'Q');
cout << s1 << endl <<s2 << endl<< s3 << endl;
3.capacity()
作用:返回该对象中字符串所占的空间大小也就是其储存字符的能力大小(与size()不同)。
用法:
string str("Hello World");
size_t i = str.capacity();
cout << i << endl;
4.reserve()
作用:将字符串容量调整到n,如果n大于原先的容量则扩充到n(可能比n大)。
用法:
string str("Hello World");
size_t i = str.capacity();
str.reserve(20);
size_t j = str.capacity();
cout << i <<' '<<j<< endl;
5.clear()
作用:清除字符串的内容,将该字符串变成空字符串。
用法:
string str("Hello World");
str.clear();
cout << str << endl;
6.empty()
作用:判断字符串是否为空,如果为空则返回true,否则返回false。
用法:
string str("Hello World");
cout << str.empty() << endl;
str.clear();
cout << str.empty() << endl;
四、operator[]
作用:可以将字符串像数组一样进行下标访问。
用法:
string str("Hello World");
cout << str[4] << endl;
五、修饰符(Modifiers)
1.operator+=
作用:在string对象的尾部插入一个字符、字符串、或者一个string对象。
用法:
string s1("Hello World"), s2("Hello World"), s3("Hello World");
s1 += s2;
s2 += "world";
s3 += 'Q';
cout << s1 << endl << s2 << endl << s3 << endl;
2.append()和push_back()
作用:功能上大差不差都是插入字符或者字符串。
3.insert()
作用:在字符串pos指向的字符的前面插入字符或者字符串。
用法:
string str("Hello World");
str.insert(str.begin(), 'Q');
cout << str << endl;
4.erase()
作用:在字符串pos指向的字符后面开始向后删除len个字符。
用法:
string str("Hello World");
str.erase(5, 5);
cout << str << endl;
5.replace()
作用:将字符串pos指向的字符后len个字符替换成字符串str。
用法:
string str("Hello World");
str.replace(str.find('e'), 6, "Q");
cout << str << endl;
6.swap()
作用:将一个字符串与另一个字符串进行交换。
string s1("qqqqq"), s2("wwww");
cout << s1 << " " << s2 << endl;
s1.swap(s2);
cout << s1 << " " << s2 << endl;
六、find()和rfind()
1.find()
作用:从字符串pos指向的字符开始向后找字符c或者字符串s,并返回第一次找到的元素下标,如果没找到则返回npos。
用法:
string str("Hello World");
cout << str.find('r') << endl;
cout << str.find('q') << endl;
2.rfind()
作用:和find几乎相同,只不过rfind是 从后往前遍历,也就是返回最后一个与之对应的元素的下标,如果未匹配则返回npos。
用法:
string str("Hello World Hello World ");
cout << str.rfind('r') << endl;
七、substr()和compare()
1.substr()
作用:将字符串pos指向的字符开始向后截取len个字符并将其赋值给一个新构造的对象。
用法:
string str("Hello World");
string s = str.substr(5, 6);
cout << s << endl;
2.compare()
作用:将两字符串进行比较返回整数。
用法:
string str("Hello World");
string s("qweffj");
cout << str.compare(s) << endl;