(以下内容对应卡码网题目10.平均绩点、11.句子缩写)
字符串string类型
- 字符串是一种数据结构(和上一篇文章叙述的数组平级)
- 相较于用单引号
''
括起来的字符char类型,用双引号""
括起来的字符串string类(这是C++标准库中定义的一个类)可表示多个字符,并支持动态调整(具体见下)
字符串的定义
- 首先需要引入头文件
<string>
,另外需要注意的是,string类是标准库的一部分,因此也包含在命名空间std里 - 声明方式,
string variable_name;
- 初始化方式,
string variable_name = "任意字符串";
或string variable_name(5, 'a');
(堆叠5个字符a)
字符串的操作
- 拼接(加法)
string s1 = "hello";
string s2 = "world";
string s3 = s1 + " " + s2; // 拼接之后的字符串是"hello world"
- 获取长度,
int length = string.size();
- 下标访问,
char letter = string[i];
- 判断为空,
string.empty()
,如果为空返回true,否则返回false
字符串结合getline()函数
- 整行读取,使用getline函数,
getline(cin, string)
将会从输入中读取内容到string中,遇到换行符停止(该函数还可以用于文件的读取,届时将读取到文件结束符停止)- 需要注意的是,如果连用cin和getline,即先使用cin读取输入,紧接着使用getline读取整行,可能会发生getline读取为空的情况。这种情况是因为cin读取到当前行的空白字符即停止,此时如果当前行的输入只有一个字符串,那么将剩下如空格、制表符或换行符没有被读取完毕,此时使用getline并不会读取下一行,而是会读取本行剩余内容,此时只剩下的如果是换行符,则getline会直接读一个空值
引用
- C++中,引用即变量的别名,修改引用将会同步修改原变量
- 引用的定义和初始化
int &a = b;
,这里&
代表所初始化的变量为一个引用,并且引用必须要在定义时初始化,且不能够改变所引用的对象 - 引用常用于作为函数的形参
函数的形参实参
- 如果使用引用作为函数的形参,则此时函数体内进行的操作将影响实参,因为引用形参相当于实参的别名,对形参的修改会同步影响实参
- 如果使用常规变量而不是引用作为形参,则实参会在传入函数时复制给形参,这对应两个影响,一是形参的改变将不会影响实参,二是这一复制行为将带来额外的内存开销
Python中的变量值交换以及元组解包(tuple unpacking)
- C++等很多语言中,进行变量值的交换常常需要创建一个中间临时变量来储存变量之一的值
- 然而在Python中,当使用形如
a, b = b, a
的语句时,Python解释器将自动把等号后的b, a
创建为一个元组,之后利用元组解包把其值分别赋给a和b,也就实现了相较其它语言更为简洁的a、b值交换的操作 - 所谓元组解包,其实就是把元组中的值自动依次赋值给多个变量的过程,如
a, b, c = (1, 2, 3)
就是一个典型的元组解包过程,将分别把1,2,3赋值给a,b,c