string成员函数
总体函数
代码语言:javascript复制#include <string>
#include <iostream>
using namespace std;
int main()
{
//构造函数
string str1 = "hello";
string* str2 = new string("hello");
string str3 = "world";
//获取字符长度
int n = str1.length();
//字符拼接
string str4 = str1 str3;
//获取字符串第一个字符
string::const_iterator it = str1.begin();
cout << *it << endl;
it = str1.end();
it--;
cout << *it << endl;
//字符串倒置
reverse(str1.begin(), str1.end());
//字符串转字符数组
string c = "abc123";
char *d = new char[20];
strcpy(d, c.c_str());//因为这里没有直接赋值,所以指针类型可以不用const char *
//访问
cout<<str1[1]<<endl;
cout<<str1.at(1)<<endl;
//查找
string st1("babbabab");
cout << st1.find('a') << endl;//1,默认从位置0(即第1个字符)开始查找
cout << st1.find('a', 2) << endl;//4 在st1中,从位置2(b,包括位置2)开始,查找a,返回首次匹配的位置
cout << (st1.find('c', 0) == -1) << endl;//1
string st2("aabcbcabcbabcc");
str1 = "abc";
cout << st2.find(str1, 2) << endl;//6,从st2的位置2(b)开始匹配,返回第一次成功匹配时匹配的串(abc)的首字符在st2中的位置,失败返回-1
cout << st2.find("abcdefg", 2, 3) << endl;//6 取abcdefg得前3个字符(abc)参与匹配,相当于st2.find("abc", 2)
//rfind-从指定位置起向前查找,直到串首
cout << st1.rfind('a', 7) << endl;//6
//find_first_of-在源串中从位置pos起往后查找,只要在源串中遇到一个字符,该字符与目标串中任意一个字符相同,就停止查找,返回该字符在源串中的位置;若匹配失败,返回-1
string str6("bcgjhikl");
string str7("kghlj");
cout << str6.find_first_of(str7, 0) << endl;//2,从str1的第0个字符b开始找,g与str2中的g匹配,停止查找,返回g在str1中的位置2
//find_last_of-与find_first_of函数相似,只不过查找顺序是从指定位置向前
string str("abcdecg");
cout << str.find_last_of("hjlywkcipn", 6) << endl;//5,从str的位置6(g)开始向前找,g不匹配,再找c,c匹配,停止查找,返回c在str中的位置5
//find_first_not_of-在源串中从位置pos开始往后查找,只要在源串遇到一个字符,与目标串中的任意字符都不相同,就停止查找,返回该字符在源串中的位置;若遍历完整个源串,都找不到满足条件的字符,则返回-1
cout << str.find_first_not_of("kiajbvehfgmlc", 0) << endl;//3 从源串str的位置0(a)开始查找,目标串中有a,匹配,..,找d,目标串中没有d(不匹配),停止查找,返回d在str中的位置3
//find_last_not_of-与find_first_not_of相似,只不过查找顺序是从指定位置向前
cout << str.find_last_not_of("kiajbvehfgmlc", 6) << endl;//3
return 0;
}
常用函数
构造函数
代码语言:javascript复制 string strs //生成空字符串
string s(str) //生成字符串str的复制品
string s(str, stridx) //将字符串str中始于stridx的部分作为构造函数的初值
string s(str, strbegin, strlen) //将字符串str中始于strbegin、长度为strlen的部分作为字符串初值
string s(cstr) //以C_string类型cstr作为字符串s的初值
string s(cstr,char_len) //以C_string类型cstr的前char_len个字符串作为字符串s的初值
strings(num, c) //生成一个字符串,包含num个c字符
strings(strs, beg, end)
//以区间[beg, end]内的字符作为字符串s的初值
std::string s('x'); //错误
std::string s(1, 'x'); //正
std::string s("x"); //正确
析构函数
代码语言:javascript复制~string() //销毁所有内存,释放内存
示例
代码语言:javascript复制 #include <iostream>
#include <string>
using namespace std;
int main ()
{
string str ("12345678");
char ch[ ] = "abcdefgh";
string a; //定义一个空字符串
string str_1 (str); //构造函数,全部复制
string str_2 (str, 2, 5); //构造函数,从字符串str的第2个元素开始,复制5个元素,赋值给str_2
string str_3 (ch, 5); //将字符串ch的前5个元素赋值给str_3
string str_4 (5,'X'); //将 5 个 'X' 组成的字符串 "XXXXX" 赋值给 str_4
string str_5 (str.begin(), str.end()); //复制字符串 str 的所有元素,并赋值给 str_5
cout << str << endl;
cout << a << endl ;
cout << str_1 << endl;
cout << str_2 << endl;
cout << str_3 << endl;
cout << str_4 << endl;
cout << str_5 << endl;
return 0;
}
迭代器
代码语言:javascript复制const_iterator begin()const;
iterator begin(); //返回string的起始位置
const_iterator end()const;
iterator end(); //返回string的最后一个字符后面的位置
const_iterator rbegin()const;
iterator rbegin(); //返回string的最后一个字符的位置
const_iterator rend()const;
iterator rend(); //返回string第一个字符位置的前面
示例
代码语言:javascript复制 #include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main ()
{
string s ("The zip code of Hondelage in Germany is 38108.");
cout << "Original: " << s << endl;
string sd(s.begin(),s.end ()); //构造函数中使用迭代器
cout << "Destination: " << sd << endl;
// transform (sd.begin(), sd.end(), sd.begin(), toupper); //算法中使用迭代器(仿函数)
// cout << "Destination (All Toupper)): " << sd << endl;
string sd1;
sd1.append (sd.begin(),(sd.end() -7)); //append()函数中使用迭代器
cout << "Destination sd1: " << sd1 << endl;
string sd2;
string::reverse_iterator iterA;
string temp = "0";
for (iterA = sd.rbegin (); iterA != sd.rend (); iterA ) //reverse_iterator
{
temp=* iterA;
sd2.append (temp);
}
cout << "Destination sd2: " << sd2 << endl;
sd2.erase (0, 15); //erase()函数中使用迭代器
cout << "Destination sd2 (Erased 15 chars) : " << sd2 << endl;
string::iterator iterB = sd2.begin ();
string sd3 = string ("12345678");
sd2.insert (sd2.begin(), sd3.begin(), sd3.end()); //insert()函数中使用迭代器
cout << "Destination sd2 (Insert 8 chars) : " << sd2 << endl;
sd2.replace (sd2.begin (), sd2.end(), "This is an Exarrple of Replace"); //Replace
cout <<"Destination sd2 (Replace All): " << sd2 << endl; // replace ()函数中使用迭代器
}
字符长度
代码语言:javascript复制int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)
int max_size()const; //返回string对象中可存放的最大字符串的长度
int size()const; //返回当前字符串的大小
int length()const; //返回当前字符串的长度
bool empty()const; //当前字符串是否为空
void resize(int len,char c);//把字符串当前大小置为len,并用字符c填充不足的部分
示例
代码语言:javascript复制 #include <iostream>
#include <string>
using namespace std;
int main ()
{
int size = 0;
int length = 0;
unsigned long maxsize = 0;
int capacity=0;
string str ("12345678");
string str_custom;
str_custom = str;
str_custom.resize (5);
size = str_custom.size();
length = str_custom.length();
maxsize = str_custom.max_size();
capacity = str_custom.capacity();
cout << "size = " << size << endl;
cout << "length = " << length << endl;
cout << "maxsize = " << maxsize << endl;
cout << "capacity = " << capacity << endl;
return 0;
}
输入流
代码语言:javascript复制 string input("hello,this is a test");
istringstream is(input);
string s1,s2,s3,s4;
is>>s1>>s2>>s3>>s4;//s1="hello,this",s2="is",s3="a",s4="test"
ostringstream os;
os<<s1<<s2<<s3<<s4;
cout<<os.str()
//2
getline(istream &in,string &s); //用于从输入流in中读取字符串到s中,以换行符'n'分开
//eg:
string s1;
getline (cin, s1); // 实现了读取一行字符,包括空格、制表符、回车符等行内字符和符号,以n分开
示例
代码语言:javascript复制 #include <iostream>
#include <string>
using namespace std;
int main ()
{
string s1, s2;
getline(cin, s1);
getline(cin, s2, ' ');
cout << "You inputed chars are: " << s1 << endl;
cout << "You inputed chars are: " << s2 << endl;
}
访问元素
代码语言:javascript复制const char &operator[](int n)const;
const char &at(int n)const;
char &operator[](int n);
char &at(int n);
示例
1
代码语言:javascript复制 #include <iostream>
#include <string>
int main()
{
const std::string cS ("c.biancheng.net");
std::string s ("abode");
char temp =0;
char temp_1 = 0;
char temp_2 = 0;
char temp_3 = 0;
char temp_4 = 0;
char temp_5 = 0;
temp = s [2]; //"获取字符 'c'
temp_1 = s.at(2); //获取字符 'c'
temp_2 = s [s.length()]; //未定义行为,返回字符'