头文件<string> 所有操作都需要调用此头文件
重载操作符:
索引[ ](第一个是0)
合并字符串+(注意左右操作对象不能都是字符串字面值)
类似的还有==、<、>、!=等和+、-、=
C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。在使用>,>=,<,<=这些操作符的时候是根据”当前字符特性”将字符按字典顺序进行逐一的比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。
另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等 、>0-大于、<0-小于。
相关函数/方法:
输入getline(输入流,字符串,分隔符) 第三个参数默认是换行,任何分隔符都可以,表示输到这里终止,常见的输入流有cin
相似的有cin.getline(字符指针(char*),字符个数N(int),结束符(char))
方法:
返回长度 size和length(用法完全相等)
判断是否为空empty() 如果空返回ture
字串搜索 find(目标字符串,搜索的开始位置)正向搜索输出第一个搜到的索引数,没搜到返回特殊整数值string::npos
refind 反向(向前)搜索
切片 substr(起始位置,终止位置) 注意这个是传值调用,且前开后闭
插入insert(插入位置,插入字符串) 不支持传入单个字符,这时的单个字符必须写成字符串形式(eg.“s”)
倒置串
reverse(str1.begin(), str1.end());
cout << "倒置串:" << str1 << endl;
cout << endl;
删除 erase()有三种用法:(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)(3)erase(first,last);删除从first到last之间的字(first和last都是迭代器)函数原型分别是(1)string& erase( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator position );(3)iterator erase ( iterator first, iterator last )
迭代器使用:
获取字符串的第一个字符
string::const_iterator iter = str1.begin();
cout << *iter << endl;
cout << endl;
获取字符串的最后一个字符
iter = str1.end();//end是指向最后一个字符后面的元素,而且不能输出,所以cout << *it << endl;这样输出会报错
iter--;
cout << *it << endl;
cout << endl;
String类与c风格字符串的转换
char[ ] 转换成string
这个与char*的情况相同,也可以直接赋值,但是也会出现上面的问题,需要同样的处理。
- 字符数组转化成string类型:
char ch [] = "ABCDEFG";
string str(ch); //也可string str = ch;
或者
char ch [] = "ABCDEFG";
string str;
str = ch; //在原有基础上添加可以用str += ch;
5、string转换成char[ ]
string对象转换成C风格的字符串:
const char *str = s.c_str();
这是因为为了防止字符数组被程序直接处理c_str()返回了一个指向常量数组的指针。
由于我们知道string的长度可以根据length()函数得到,又可以根据下标直接访问,所以用一个循环就可以赋值了,这样的转换不可以直接赋值。
string str = "Hello World";
int len=str.length();
char ch[255]={};
for( int i=0;i<str.length();i++)
ch[i] = str[i];
ch[len+1] = '\0';
printf("%s\n", ch);
cout<<ch<<endl;