「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」
1、命名空间using
- 库函数基本上都属于命名空间using,例如:
std::vector - using声明可以更简单的使用到命名空间中的成员
格式如下:
using namespace::name//1
或者:
using namespace name_of_namespace//2
区别在于1可以只是可以使用声明命名空间里名字为
name的,而2可以使用该命名空间里的所用成员
示例
namespace name_b
{
int a=20;
namespace name_c
{
struct student
{
string name;
int age;
};
}
}
注意:using还有个功能和typedef一样C++ 笔记——变量和基本类型(二)中类的别名
2、字符串string初始化
- 默认初始化:string s1; s1是一个空字符串
- 拷贝构造(标准库的做法是深拷贝)(重载构造函数):string s2=s1; s2是s1的副本,string s3="haha"; s3是haha的副本
- 有参构造函数:string s4(10,'C'); s4是CCCCCCCCCC
拷贝初始化与直接初始化
如果使用=号初始化一个变量,执行的是拷贝初始化,反之不使用=号初始化则为直接初始化
示例
string s4(10,'C'); //直接初始化
string s3="haha";//拷贝初始化
string s2=s3;//拷贝初始化
string s5=string(10,'C'); //创建一个隐式(临时)变量,然后进行拷贝初始化
3、关于string对象的操作
-
全部以string s,s1,s2;为例
- os<<s 将字符串s写入到输出流,返回os;
- is>>s 从is输入流中读取字符串给s,空白分隔,getline(is,s),从is中读取一行给s,返回is
- s.empty()字符串判空操作
- s.size() 或s.length():返回s中字符个数
- s[n] 返回索引为n的字符串的引用
- < ,> ,<= ,>=,==,!= 按字典序比较对大小写敏感
- s1+s2 ,返回s1与s2的拼接
- s1=s2,深拷贝赋值
- s.push_back(ch) 在末尾添加字符ch
- s.pop_back() 从末尾弹出
- s.insert() 插入字符或字符串
- s.substr() s的字符串
- s.clear() 删除所有字符
- s.erase() 删除部分字符或字符串
- 等等,上述是最常用的几种
-
使用范围for遍历字符串字符,具体格式如下
for(declaration:expression)
statement
示例:输出str中的每个字符
for(auto &ch:str)
cout<<ch<<endl;
处理string对象的字符(处理字符)(借助ctype.h头文件,也就是cctype)
-
isalnum(c) c为数字或字母字符时返回为真
-
isalpha(c) c为字母字符时返回为真
-
iscntrl(c) c为控制字符时返回为真
-
isdigit(c) c为数字字符时返回为真
-
isgraph(c) c不是空格但可以打印返回为真
-
islower(c) c为小写字母字符时返回为真
-
isprint(c) c为可打印字符时返回为真,c是空格或具有可是形式
-
ispunct(c) c为标点符号字符时返回为真
-
isspace(c) c为空白字符字符时返回为真,空白字符包含空格、横向制表符、纵向制表符、回车符、换行符、进纸符
-
isupper(c) c为小写字母字符时返回为真
-
isxdigit(c) c为六进制数字字符时返回为真
-
tolower(c) 小写转大写
-
toupper(c) 大写转小写
重载[]
[]下标运算符被string进行操作符重载,使string对象可以按照类似数组访问的方式去访问字符,但索引idx不能超过string对象的大小
示例:
string str(10,a);
for(int i=0;i<str.size();++i){
cout<<str[i]<<endl
}