C++ String详解

  • 标准库类型string代表可变长的字符序列,使用前需添加头文件,string定义在命名空间std中。
  • string的定义和初始化:
  • 初始化string对象的几种方式:
  • ```
    1 string s1;//默认初始化方式,s1是一个空字符串
    2 string s2 = s1;//s2是s1的副本
    3 string s3 = "hello";//s3是该字面值的副本
    4 string s4("hello");//等价于s3 = “hello”
    5 string s5(10,'c');//s5的内容为cccccccccc

* 拷贝初始化和直接初始化

    * 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化
    * 反之,如果不使用等号,则执行的是直接初始化
    * 当用于类类型对象时,初始化的拷贝形式和直接形式有所不同,直接初始化直接调用与实参匹配的构造函数,拷贝初始化总是调用复制构造函数。拷贝初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将临时对象复制到正在创建的对象
    * 对于拷贝初始化,最明显的调用手段就是使用"="符号,但还有许多隐式调用的情况,如:参数传递,函数返回,初始化容器

        * 参数传递:对于函数的参数传递,除非是引用参数,否则就是一个使用上层传递参数的拷贝参数
        * 函数返回值:除非是引用返回值,否则返回的也是上层对象的一个拷贝


* 读写string

1 //getline函数的作用是从输入流中读取一行字符
2 //示例代码
3 #include
4 #include
5 using namespace std;
6
7 int main()
8 {
9 string s;//定义一个名为s的空字符串
10 cout << "enter a sentence" << endl;
11 cin >> s;//将标准输入的内容读取到s中
12 cout << "The string read with cin is:" << s << endl;
13 //在执行读取操作时,string对象会自动忽略开头的空白,并从一个真正的字符开始,直到遇到下一个空白结束
14 //所以如果程序的输入是“ hello world”,则输出将是“hello”,输出结果中没有任何空格
15
16 //getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止,然后把所读内容存入string对象中
17 getline(cin,s);//从输入流中读取内容存入s中
18 }


* size_type

    * 由string类类型和vector类类型定义的类型,用于保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型
    * size_type是一个无符号类型的值,而且能够放下任何string对象的大小,所有用于存放string类的size函数返回值的变量,都应该是string::size_type类型的
    * size_type从本质上讲,是一个整型数,关键是由于机器的环境不同,他的长度是不同的,这就体现了机器无关性

* string对象的比较运算

    * 相等性运算符(==和!=)分别检验两个string对象相等或不相等,区分大小写,意味着长度相同且所包含字符也全部相同
    * str.compare(“ str1”)==0 str和str1比较,若相等则为compare返回0,与0比较为真,反之则为假

* string对象的拼接

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


1 string s1 = "hello, ",s2 = "world\n";
2 string s3 = s1 + s2;//s3的内容是hello, world\n


* * 字面值和string对象相加


1 //当把string对象和字符字面值以及字符串字面值混在一条语句中使用时,必须确保每个加法运算符两侧的运算对象至少有一个是string对象
2 string s4 = s1 + ", ";//正确,把一个string对象和字符串字面值相加
3 string s5 = "hello" + ",";//错误,两个运算对象都不是string
```

原文链接: https://www.cnblogs.com/danielStudy/p/6732273.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/252782

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午6:20
下一篇 2023年2月14日 上午6:21

相关推荐