使用 string 类的头文件:#include<string>,不是#include<string.h>,后面有.h的是C语言的库。
string 也是 STL标准库中的一个容器。
1.string的构造:
string str;
string str = “hello world”;
都是正确的写法。
2.string特性返回和修改:
如有:
string str;
1.int size()const :返回当前字符串的大小
int size = str.size();
2.int length()const :返回当前字符串的长度
int len = str.length();
if(str.empty())
4.void resize(size_t n,char c);或void resize(size_t n):重置字符串大小
前者可以重置字符串大小,且多出来的用字符串char c来补充。
#include <iostream>
#include <string>
int main ()
{
std::string str ("I like to code in C");
std::cout << str << '\n';
unsigned sz = str.size();
str.resize (sz+2,'+');
std::cout << str << '\n';
str.resize (14);
std::cout << str << '\n';
return 0;
}
输出:
I like to code in C
I like to code in C++
I like to code
3.string字符串字符操作:
1.char &at(size_t n):返回字符串string str 的n位置的字符。(0<=n < str.length())
string str="hello";
cout<<str.at(1)<<endl;//打印:e
2.char & operator[ ](int n)const:返回字符串string str 的n位置的字符,但与 at()相比,at会提供越界检查,越界时会抛出错误。而这种方法则不会。
string str=“hello”;
cout<<str[1]<<endl;//打印e
3. int copy(char* s,size_t len,size_t pos = 0)const;
string 字符串从pos位置(默认值为0)起始,复制 len 个字符到,char型数组中,注意一定是char 数组,不是string,因为函数第一个参数已经规定。
返回实际成功复制的字符个数。
char s[20];
std::string str ("Test string...");
std::size_t length = str.copy(s,6,5);
s[length]='\0';
std::cout << s << '\n';
打印:string
4.string的输入输出:
string 类重载了operator>>用于标准输入,同样重载了operator<<用于标准输出。所以有:
cin>>str;//从键盘输入
cout<<str;//输出屏幕
5.string类迭代器的使用
迭代器跟指针用法十分相似。
string str="hello";
string::iterator iter; //定义一个string容器的迭代器iter
iter = str.begin(); //迭代器指向string字符串str的第一个元素,即‘h’
iter = str.end(); //迭代器指向str最后一个元素的后一个位置。当iter=str.end()表示访问str完成
也可以通过迭代器对string中的元素(即string字符串中的字符)进行操作,如把字符串 str 中的字符全改成a
string str="hello";
string::iterator iter = str.begin();
for(iter;iter!=str.end();iter++)
{
*iter = 'a';
}
*iter 表示取 iter 迭代器指向的元素。
5.string类的连接
1.string &operator+=(const string &s) //把字符串s连接在字符串的末尾
string a="hello";
string b=" world";
a+=b;
cout<<a<<endl; //print:hello world
2.string str.append(const char *s) //把char *c字符串连接在 string 字符串后
string str="hi,";
char s[]="hello";
str.append(s); //str=“hi,hello”
3.string str.append(const char*s,int n) //从char *c字符串中提取前n个字符,连接在string 字符串后
string str="hi,";
char s[]="hello";
str.append(s,2); //str=“hi,he”
6.string类的删除操作:erase
1.删除一段区间---迭代器标识:
string str="abcdefg";
string::iterator iter1,iter2; //定义两个迭代器
iter1 = find(str.begin(),str.end(),'d'); //返回str中d位置
iter2 = str.erase(str.begin(),iter1); //删除从str第一个元素到‘d’位置前的字符
cout<<str<<endl; //打印结果:defg
2.删除一段区间---位置标识:
string str="abcdefg";
str.erase(0,5); //从位置0开始删除,删除5个字符
cout<<str<<endl; //打印结果:fg
3.删除想删除的字符:
string str="abcdabcdabcdabcd";
string::iterator iter;
for(iter=str.begin();iter!=str.end();iter++)
{
if(*iter =='a')
{
str.erase(iter);
}
}
cout<<str<<endl;//打印结果:bcdbcdbcdbcd
7.string类的替换
string &replace(int pos, int n , const string& str);// 从string型字符串str 的 pos位置起,删除 n 个字符,再在pos位置插入string型字符串 str;
string &replace(int pos, int n ,const char * s); // 从string型字符串str 的 pos位置起,删除 n 个字符,再在pos位置插入字符型字符串 s;
string str1="hello,jack!";
string str2="andy";
str1.replace(6,4,str2);
cout<<str1<<endl; //打印:hello,andy!
string &replace(int pos1,int n1,const &string s,int pos2,int n2);//从string字符串的pos1位置开始,删除n1个字符,再插入从string字符串s的pos2位置起,n2个长度的子字符串
string str1="hello,jack!";
string str2="hello,andy!";
string str3;
str3=str1.replace(6,4,str2,6,4);//把str1的jack先删除,再插入str2的andy
cout<<str3<<endl; //打印:hello,andy!
8.string类的插入
string &insert(int p0, const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
//前4个函数在p0位置插入字符串s中pos开始的前n个字符
string str1="china,guangzhou";
string str2="guangdong,";
string str3;
str3 = str1.insert(6,str2);
cout<<str3<<endl;
string &insert(int p0, int n, char c);//此函数在p0处插入n个字符c
iterator insert(iterator it, char c);//在it处插入字符c,返回插入后迭代器的位置
string str1="china,guangzhou";
string::iterator iter;
string str2 = ",guangdong";
iter = find(str1.begin(),str1.end(),',');
iter=str1.insert(iter,'A');
cout<<str1<<endl; //打印:chinaA,guangzhou
cout<<*iter<<endl; //打印:A