C++ 笔记——using、字符串

1,059 阅读2分钟

「这是我参与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
}