c++基础第二次

第一个问题,如何使用在命名空间std中的库
之前很麻烦的在每个函数前加上std::

std::string str = '';
std::cin >> i;
std::cout << b << std::endl;

一种方便得到方法是使用using声明: using namespace::name;
这样每个using声明引入命名空间中的一个成员
注意:头文件中一般不应该使用using声明,会造成名字冲突。

标准库类型string

首先别忘了包含头文件string。

#include <string>
using std::string;

前面提到默认初始化string对象,是一个空串。
特别的有,提供数字和字符,进行重复 string str(10,'c');表示定义一个string类型的str,初始化为“cccccccccc”.

初始化方式的不同:
1.使用等号,初始化一个变量,是拷贝初始化,编译器把等号右边的初始值拷贝到新创建的对象中。
2.不使用等号,就是直接初始化。

当初始值只有一个,使用直接初始化和拷贝初始化都可以
初始化的值有多个,最好用直接初始化(拷贝初始化可读性差)

例子:string str = string(10, 'c');其中需要显式创建一个临时string对象进行拷贝,

string temp(10, 'c');
string str = temp;

string的操作
getline(is , s ) 从is中读取一行赋给s,返回is
s.empty() 判断s是否为空串
s.size() 返回s中字符的个数(不包括’\0’)
s1+s2 返回字符串连接后的结果
s1 == s2 判断两个字符串的字符完全相同
比较运算符 利用字符在字典中的顺序进行比较

在执行读取操作时,string对象会自动忽略开头的空白(空格、换行、制表符等)从第一个真正的字符开始读,直到遇到下一处空白。

怎么样保留空白呢?还记得前面的getline(s1, s2)吗
1.getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符(这里换行符也被读取)
2.然后把读入的内容存到string对象中(不存换行符)

getline函数一遇到换行符就结束操作并返回结果。
如果一开始遇到换行符,返回一个空的string串。

s.size()函数返回一个string::size_type类型的值(体现了标准库类型与机器无关的特性)
目前来看,string::size_type类型是一个无符号类型的值,而且能存放下任意string对象的大小。

如果一条表达式中有size()函数就不再使用int,混用带符号和无符号,带来隐式转换的问题。

string对象相等意味着他们的长度相同而且包含的字符也全都相同。

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

string s = s1 + ' ' + 'hello';

范围for 语句

for(declaration : expression)
	statement;

其中 expression部分是一个对象,用于表示一个序列
declaration部分负责定义一个变量,该变量将被用于访问序列中的基础元素
每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素

例子:使用范围for语句把string对象中的字符每行一个输出出来(相当于遍历字符串)

string str("some string");
for(auto c : str)
	cout << c << endl;
使用范围for 语句改变字符串中的字符

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

这里引用只是给定对象的一个别名,因此当使用引用作为循环控制变量时,这个变量实际上被依次绑定到了序列的每一个元素上,使用这个引用,可以改变绑定的字符。

string str("some string");
for(auto &c : s)
	c = toupper(c);				//c是个引用,赋值语句将改变s中字符的值
cout << s << endl;

每次迭代时,变量c引用string对象s的下一个字符,赋值给c也就是在改变s中对应字符的值。

访问string对象中的单个字符:
1.使用下标
2.使用迭代器

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

string对象的下标大于等于0小于s.szie()
如果某个下标是带符号类型的值就会自动转换为由string:;size_type类型表达的无符号类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值