创建string对象:
string s1; // s1 未使用初始化参数,即默认初始化为空字符串
string s2 = "c++" ; //不是赋值运算,它等价于 string s2("c++") ,是初始化
string s3 (5, 's'); // s4 初始化为 5 个 s;
string类实现了以下运算符的重载:
联接运算:+
比较运算:==,!=,<,<=,>,>=
赋值运算:=,+=,右值可以是字符串,字符,C字符串,字符数组
整行读入字符串(包括空格):
getline(cin,str);
复习·常量指针与指针常量:
注意 const int * p1是常量指针(一个常量的指针),p1可以改,但*p1不能改(直接改可以,只是不能通过*p1改)
int * const p2是指针常量(指针是常量),p2不能改,但p2指向的值可以改
const int * const p3 则p3和*p3不能改。
函数重载:
string操作:
s.length() //返回长度,不包括结束符即之后。
s.c_str() //返回一个c风格字符串,类型是const char* cs 常量指针
s.find(str,pos) //从下标pos开始,寻找首个等于给定字符序列的子串。返回值为下标而非地址(c语言的strchr就返回地址)。find改成rfind 则从右边开始搜索。
s.replace(pos,count, str) : 从pos开始的count位被抹除,并用str取代,str可以比l位长或短。
append(str) :在后面增加字符串str
append(int count, char ch) :在后面增加count 个字符 ch
insert(int index, int count, char ch) :在 index 下标前面插入 count 个 ch
insert(int index, str): 在 index 下标前面插入 str
erase(int index, int count) :删除从下标 index 开始的 count 个字符
clear() 清空
substr(int pos, int count): 返回从下标pos开始长度为count的子串对象
compare(str) :与str比较,返回 1,0,-1之一
compare(int pos, int count, str) :从下标pos开始长度为count的子串与str比较,返回 1/0/-1
copy(str, int pos, int count): 将子串复制到目标对象str
swap(string other) :与 other 交换内容
const和constexpr:
因为 const 语义有两个:(一般两种意思同时具有)
1.限定为只读变量(作为函数参数时没有赋予初值,默认为只有这种意思)
与引用结合时,const int & con_b = a; 则a值变时b仍然会变。
2.限定作为常量或字面量
C++11 标准添加键字 constexpr,限定为常量表达式,声明编译时可以对右值(函数或变量)求值,即限定为编译时可优化执行的函数
auto:
c++中auto是一个类型。一个变量如果有初始化表达式,就可以用auto代替类型声明。在编译期间根据表达式类型自动推导出对象的类型。
注意:
1.用auto声明的变量必须有初始化
2.函数和模板参数不能被声明为auto
3.auto不能用于类型转换或其他一些操作,如sizeof
4.定义在一个auto序列的变量必须始终推导成同一类型