程序员写代码少不了要与字符串打交道,C++既然给我们提供了这么优良的武器(string 类),如果我们不用起来,又怎么能够爆发出我们的洪荒之力呢。以下笔记归纳参考的是北大郭炜和刘家瑛老师的C++课程来进行的。主要是能够方便自己以后回顾知识,如果客官们觉得还将就,也可以尽情的拿去。
string 类是一个类模板实例化出来的模板类。
定义:
typedef basic_string<char> string;
初始化:
string 类的有以下3种初始化方式
1. string s1("hello");
2. string s2(8,'x');
3.string month = "March"。
注意:string 类不提供以字符和整数为参数的构造函数
反例:string error1('u');
string error2(8);
string 对象的长度可以用成员函数length(),size()读取;
string 支持流读取运算符,例:string obj;cin>>obj;
string 支持getline函数,例:string s;getline(cin,s);
赋值
1.用'='赋值
2.用assign成员函数复制
全复制:string s1("cat"),s2;s3.assign(s1);
部分复制:string s1("catpig"),s2;s3.assign(s1,1,3);//从s1下标为1的字符开始复制3个字符给s3
3.单个字符复制:s1[2]=s[3]='b';
链接
1.用+运算符链接字符串,例:string s1("good"),s2("morning!");s1+=s2;
2.用成员函数append链接字符串;
a.全连接,例:string s1("good"),s2("morning!");s1.append(s2);
b.部分链接,例:string s1("good"),s2("morning!");s1.append(s2,3,s2.size());//从s2的下标为3开始的到s2.size()的字符串,链接到s1的尾部。
//如果没有字符串没有足够字符,则复制到字符串最后一个字符为止。
访问:
1.用.at(index) 逐个字符的访问;//注意 成员函数at会做范围检查,超出范围则抛异常,而下标运算符不会做范围检查
2.用成员函数substr()访问字符串的子串,例:string s1("hello world"),s2;s2=s1.substr(1,5)//s1下标1开始的5个字符赋值给s2;
比较:
关系运算符(==,<,<=,>,>=,!=) 可以比较字符串之间的大小,返回值都为bool型。
查询:
1.成员函数find(),例:string s1("hello world");s1.find("lo");//从左到右查询"lo"第一次出现的下标位置;
2.成员函数rfind(),例:string s1("hello world");s1.rfind("lo");从右到左查询"lo"第一次出现的下标位置;
3.成员函数find_first_of(),例:string s1("hello world");s1.find_first_of("abcd");//在s1中从左向右查找“abcd”中任何一个字符第一次出现的地方;
4.成员函数find_last_of(),例:string s1("hello world");s1.find_last_of("abcd");//在s1中从左向右查找“abcd”中任何一个字符最后一次出现的地方;
5.成员函数find_first_not_of(),例:string s1("hello world");s1.find_first_not_of("abcd");//在s1中从左向右查找不在“abcd”中的字符第一次出现的地方;
6.成员函数find_last_not_of(),例:string s1("hello world");s1.find_last_not_of("abcd");//在s1中从右向左查找不在“abcd”中的字符第一次出现的地方;
7.成员函数find(),例:string s1("hello world"); s1.find("ll",2);从s1的下标为2开始查找为"ll"
删除:
成员函数erase(),例:string s1("hello world");s1.erase(5);//从下标为5开始的删除
替换:
成员函数replace(),例:string s1("hello world");s1.replace(2,3,"haha");//将s1中下标2开始的3 个字符换成"haha"
插入:
成员函数insert(),例:string s1("hello world");string s2("show");s1.insert(5,s2);//将s2插入到s1下标5的位置
s1.insert(2,s2,5,3);//将s2中下标5开始的3个字符插入到s1下标2的位置
转换成c语言字符串:
成员函数c_str().
参考视频:北京大学 C++ 程序设计实习