string 由头文件<string>支持,支持的对象可以是字符也可以是宽字符
1、初始化
string str("1234567");
char ch[]="abcdefg";
string a;
string str_1(str);//使用str初始化
string str_2(str,2,5);//2,5 限定复制范围
string str_5(str.begin(),str.end());//迭代器的初始化
string str_3(ch,5);//ch数组的前5个元素赋值给str_3
string str_4(5,'x');//初始化str_4有5个‘x'
2.大小
1.返回实际字符的多少
cout<<str_1.size()<<endl;
cout<<str_1.length()<<endl;
cout<<str_1.max_size()<<endl;
3.capacity()
重新分配内存之前,string所能包含的最大字符数。
让string拥有足够的容量是很重要的,原因有二:
1、重新分配会造成所有指向string的references,pointer和iterators失效。
2、重新分配(reallocation)很耗时间。
因此,如果程序要用到指向string(或其内部字符)的references,pointers和iterators。抑或需要很快的执行速度,就必须考虑容量(capacity)问题。成员函数reserve()就是用来避免重分配行为。reserve()使你得以预留一定容量,并确保该容量尚有余裕之时,reference能够一直保持有效:
std::string s; // create empty string
s.reserve(80); // reserve memory for 80 characters
3.元素的随机访问,返回的是字符的引用
1)下标
cout<<str[3]<<endl;
2)at函数
cout<<str.at(3)<<endl;
4.比较
1)比较运算符>,<,>=,<=,==等,成立返回true ,否则返回false
2)compare() 函数,相同返回0,字典中A先于B,返回-1,否则返回正1
string A="aBcdEfg";
string B="AbcdeFg";
string C="123456";
string D="124354";
int m=A.compare(B);//A和整个B比较
int n=A.compare(1,5,B);//A中从1开始的5个字符和B比较
int p=A.compare(0,3,B,4,2);//A中0开始的3个字符和B中4开始的2个字符进行比较
5.修改和替换函数
1)assign()赋值
string str("1234567");
char ch[]="abcdefg";
string str1;
str1.assign(str);//利用str赋值
cout<<str1;
str1.assign(str,3,3);//利用str[3]个位置开始的3个字符赋值
cout<<str1;
str1.assign(str,2,str.npos);//利用str[2]开始到结束赋值
cout<<str1;
str1.assign(5,'x');//利用5个x赋值
cout<<str1;
2)=赋值
3)erase()
str1.erase(str1.begin()+2);//删除开始以后的第二个元素
str.erase (10,8);//str[10]以后的8个元素
str1.erase(str1.begin()+2,str1.end()-3);//利用迭代器限制范围
4)swap()函数
string str = "12345678";
string str1="98776554434";
cout << str1;
str1.swap(str);
cout << str1; //作用可以交换str和str1的值
5)插入insert
str = "ello";
str1 = "H";
str1.insert(1, str);//将str整个插入str1 第一个字符后
cout << str1;
str = "ello";
str1 = "H";
str1.insert(1, "yanchy", 3);//将“yanchy”三个字符,插入str1 第一个字符后
cout << str1;
str = "ello";
str1 = "H";
str1.insert(1, str, 2, 2);//将str[2]以后2个字符插入str1 第一个字符后
cout << str1;
str = "ello";
str1 = "H";
str1.insert(1, 5, 'x');//插入str1 第一个字符后5个‘x'
cout << str1;
str = "ello";
str1 = "H";
str1.insert(str1.begin()+1, str.begin(), str.end());//迭代器插入,begin()+1,插入位置向后移动一个
6)append()追加函数
str = "ello";
str1 = "H";
str1.append(str);//追加字符串
cout << str1;
str = "ello";
str1 = "H";
str1.append("12345", 2);//追加字符串中前两个字符
cout << str1;
str = "ello";
str1 = "H";
str1.append("12345", 2, 3);//追加字符串中,从0开始的,位置为2的字符,以后两个字符
cout << str1;
str = "ello";
str1 = "H";
str1.append(10,'a');//追加10个’a‘
cout << str1;
str = "ello";
str1 = "H";
str1.append(str.begin(),str.end() );//迭代且追加
cout << str1;
cin.get();
7)replace函数
var.replace(3, 3, dest);//var[3]开始的3个字符被dest替换
cout << var;
var = "abceefg";
var.replace(3, 1, dest, 1, 3);//var[3]开始的一个字符换成dest[1]-dest[3]
cout << var;
var = "abceefg";
var.replace(3, 1, 5, 'x');//var[3]开始的一个字符换成5个x
cout << var;
var = "abceefg";
var.replace(var.begin(),var.end(),dest);//迭代器替换
cout << var;
cin.get();
6.字符串的连接
str=str1+str2;
7.字符串的IO操作
1)>> ,<< 输入输出流
cin>>str;
cout<<str;
2)getline(cin,str1) 遇到文杰结束符,分界符,空格,回车,停止输入。
8.查找
size_t m = str.find('3', 1);//从str[1]开始查找,找到返回查找到的下标,否则返回-1
size_t n = str.rfind('3', 1);//从str[1]开始反向查找 可以查找字符和字符串
find_first_of 和find_last_of 使用方法同上
find_first_not_of 和find_last_not_of
8.c_str()
string str ("Please split this phrase into tokens");
cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());
9.。substr()
string str = "123456789";
string s2 = str.substr(1, 3);
返回从1开始的3个字符