3.1 命名空间的using声明
主要概念
- 每个using声明引入命名空间中的一个成员。(实际操作中发现只要引入命名空间就可以使用所有的可用成员)
- 头文件不应该包含using声明。
练习
练习3.1 使用恰当的using声明重做和1.4.1节和2.6.2节的练习
emmmm…实在是没必要重做了,就不写了。
3.2 标准库类型string
3.2.1定义和初始化操作
- string类型的定义模式和其他类的定义格式没有特别大的区别;
- 注意拷贝初始化和直接初始化的区别,一般而言用“=”是拷贝初始化,用括号是直接初始化。
3.2.2string对象上的操作
- string上有许多基本操作:
os << s
is >> s
s[n]
s1+s2
s1=s2
s1==s2
s1!=s2
<,<=,>,>=
- string中的empty方法可以获得string值的状态,为空返回true,否则返回false
- string中的size()可以获得当前字符串长度,注意返回类型是size_t类型,输出是unsigned int型,注意使用时的类型判断。
- getline方法可以整行获取输入值,要两个参数:
getline(cin,str);
- C++中不允许字符串字面值直接相加,使用时要注意。
3.2.2节练习
- 练习3.2:编写一段程序,从标准输入中一次读入一整行,然后修改该程序使其一次读入一个词
使用getline一次读入一整行,普通的cin一次读入一个词
string str;
//读入一整行
getline(cin,str);
//读入一个词
cin >> str;
- 练习3.3:请说明string类的输入运算符和getline函数分别是如何处理空白字符的。
cin输入string会忽略开始的空白,以空格或换行结束输入
getline只以换行结束,不忽略空白
- 练习3.4 :编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等,输出长度较大的那个字符串。
string str1,str2;
cin >> str1 >> str2;
if(str1 == str2)
{
cout << "两个" << str1 << "相等" << endl;
}
else if(str1 > str2)
{
cout << "较大的string:" << str1 << endl;
}
else
{
cout << "较大的string:" << str1 << endl;
}
- 练习3.5:编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用 空格把输入的多个字符串分隔开来。
//直接连接:
string str(""),res(str);
while(cin){
cin >> str;
res += str;
}
cout << "输入的结果:" << res << endl;
//使用空格连接
string str(""),res(str);
while(cin){
cin >> str;
res += str;
res += " ";
}
cout << "输入的结果:" << res << endl;