• 标准库类型 string


    标准库类型 string

    • 标准库类型 string 表示可变长的字符序列。
    • 使用 string 类型必须要包含头文件 <string>
    • string 定义在命名空间 std中。

    定义和初始化string对象

    直接初始化和拷贝初始化

    如果使用等号(==)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新建的对象中去。

    如果不使用等号则执行的是直接初始化

    当初始值只有一个时,使用直接初始化或拷贝初始化都行,如果初始化要用用到的值由多个,一般来说只能使用直接初始化。

    string s5 = "hiya";	//拷贝初始化
    string s6("hiya");	//直接初始化
    string s7(10,'c')	//直接初始化
    

    string对象上的操作

    读写string对象

    string s;
    cin >> s;  //将string对象读到s,遇到空白停止
    cout << s << endl;	//输出s
    

    读入字符串时,string 对象会自动忽略开头的空白(即空格符、换行符、制表符)并从第一个真正的字符开始读起,直到遇到下一个空白符为止。

    读取未知数量的 string 对象:

    string word;
    while (cin >> word) //反复读取,直到文件末尾或非法输入
    	cout << word << endl;
    

    使用getline读取一整行

    string line;
    while (getline(cin,line))
    	cout << line << endl;
    

    getline 函数的参数是一个输入流和一个string对象,函数从指定输入流中读入内容,直到遇到换行符为止(换行符也会被读进来),然后把所读的内存存到那个string对象中(不存换行符)。

    string 的 empty 和 size 操作

    empty 函数根据 string 对象是否为空返回一个对应的布尔值。

    size 函数返回 string 对象的长度,也就是 string 对象包含的字符个数。

    string::size_type 类型

    size 函数返回的是 string::size_type 类型的值。

    string::size_type 类型是一个无符号类型的值,而且能够存下任何 string 对象的大小。

    如果一条表达式中已经有了 size 函数,就不要再使用int等带符号类型,避免混用有符号类型和无符号类型造成错误。

    string 对象的比较

    • string 对象的比较是按照字典顺序的。
    • 两个 string 对象的长度不同,而且较短的 string 对象的每个字符都与较长 string 对象对应位置上的字符相同,则较短 string 对象小于较长 string 对象。
    • 如果两个 string 对象在某些对应位置上不一致,则 string 对象比较的结果其实就是 string 对象中第一个相异字符串的比较结果。

    两个string对象相加

    两个 string 对象相加得到一个新的 string 对象,其内容是把左侧的原酸对象与右侧的运算对象串接而成。

    字面值和string对象相加

    当把 string 对象和字符字面值及字符串字面值混在一个语句使用时,必须确保每个加法运算符的两侧至少有一个是 string

    string s4 = s1 + ",";	//正确,把一个string对象和一个字面值相加
    string s5 = "hello" + ",";	//错误,两个运算对象都不是string
    

    处理string对象中字符

    注意:

    C++标准兼容C语言标准库,C语言头文件形式为 name.h,C++则将这些文件命名为cname,也就是去掉了 .h 后缀。

    一般来说,C++程序应该使用 cname 的头文件,而不使用 name.h 的形式。

    使用基于范围for语句处理每个字符

    范围 for 语句是C++11新标准提供的一种语句。

    for (declaration : expression)
    	statement
    
    • expression 部分是一个对象,用于表示一个序列。
    • declaration 部分定义一个变量,该变量用于访问序列中的基础元素,每次迭代,declaration 部分的变量会被初始化为 expression 部分的下一个值。

    使用范围for语句改变字符串中的字符

    如果想改变 string 对象中的字符的值,必须把循环变量定义成引用类型。

    string s("hello,world");
    for (auto &c : s)
    	c = toupper(c);
    

    只处理一部分字符

    如果需要处理 string 对象中的每一个字符,使用范围 for 语句是一个不错的方法,但是如果只是想访问其中一个字符,或者访问多个字符但遇到某个条件就要停下来。若想访问 string 对象中单个字符有两种方法:

    • 使用下标。
    • 使用迭代器。

    使用下标访问string对象

    下标运算符接收的输入参数是 string::size_type 类型的值,这个参数表示要访问的字符位置;返回值是该位置上字符的引用。

    • string 对象的下标必须大于等于0而小于s.size()
    • 在访问指定字符之前,首先应该检查 string 对象是否为空。
    • 使用下标执行迭代:
    string s;
    for (decltype(s.size())index = 0;index !=s.size();++index)
    
  • 相关阅读:
    第一篇正式文章 随便聊聊吧
    CSS 28 块之间的空格
    CSS 27 贴在下方
    CSS 26 左右固定
    CSS 25 垂直居中
    CSS 24 左侧固定
    CSS 23 水平居中
    CSS 22 显示方式
    CSS 21 浮动
    CSS 20 相对定位
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/12498412.html
Copyright © 2020-2023  润新知