一、String字符串
在C语言中,本身不提供专门的字符串类型,通过字符数组和字符指针来处理字符串。
在C++中,它有了一个更好的解决办法,通过string类型来处理字符串
所以string就是一个类类型,它就是一个类,读者就把它看作一个类型
class basic_string{} ----> typedef basic_string string;
string 是类型basic_string的别名,basic_string它是一个类
字符串String基本使用:
void stringTypeTest()
{
/*****字符串定义初始化、赋值、运算(加)*****/
string s1 = "hello";
string s2 = " CPP ";
string s3 = "word";
//使用已有变量进行运算并新声明的变量赋值
string s4 = s1 + s2 + s3;
//output_printf:s4 =hello CPP word
cout << "s4 =" << s4 << endl;
/*****************************************/
程序:将用户输入任意字母的字符串其中的字母大小写翻转
string s;
cout << "please enter a string:";
cin >> s;
//大小写转换(大写转为小写,小写转为大写)
//s.length()自动获取字符串s的长度(包含多少个字符)
for(unsigned int i=0; i<s.length(); i++)
{
//方法一:
//转换为大写
if(s[i] >= 'a' && s[i] <= 'z')
cout << char(s[i] - ('a' - 'A'));
//转换为小写
if(s[i] >= 'A' && s[i] <= 'Z')
cout << char(s[i] + ('a' - 'A'));
//方法二:
// //判断小写字母
// if(islower(s[i]))
// //转换为大写字母,并输出
// cout << char(toupper(s[i]));
// //判断大写字母
// if(isupper(s[i]))
// //转换为小写字母,并输出
// cout << char(tolower(s[i]));
}
}
二、bool类型
在C++中,提供布尔类型 。注意与C语言的区别
真:true—> 值只能为1;假:false —> 值只能为0;非零值为1
void boolTypeTest()
{
bool i = 100; //非零值为1
cout << "bool i = " << i << endl;//bool i = 1
i = false; //false--->值只能是0
cout << "bool i = " << i << endl;//bool i = 0
i = true; //true--->值只能是1
cout << "bool i = " << i << endl;//bool i = 1
i = 0;
cout << "bool i = " << i << endl;//bool i = 0
}
三、命名空间 && 域操作符
概念:
名字空间实际上就是自定义的作用域,目的是尽可能防止符号命名冲突
在C语言中,当编译多个C文件时,可能会遇到全局标识符的错误,全局标识符都是共享同一个人作用域。
在C++为了解决标识和会命名冲突,引入命名的空间概念,可以更好的控制标识符的作用域。
语法:
namespace 命名空间名字{ }
比如:
//以关键字开头,结束没有分号
namespace spaceA
{
}
案例演示:
//以关键字开头,结束没有分号
namespace spaceA {
//基本数据类型 ----> 内置类型
int a;
int b = 666;
//结构体
struct point{
int x, y;
};
//命名空间嵌套
namespace spaceB {
int a = 12345;
int c = 321;
int j = 111;
}
}
//命名空间的使用方法:
//方式一:使用整个空间中的成员
//编译器在编译时,会加载spaceA空间中的所有成员(a,b),缺点在于如果spaceA里面定义的成员非常多
using namespace spaceA;
using namespace spaceA::spaceB;
//方式二:使用命名空间中指定的成员
// using 命名空间名字::变量名或对象名
using spaceA::a; //使用命名空间中的成员a,除此之外,其他成员,并没暴露对外
using spaceA::point;
//using声明不能引用命名空间,如:
//using spaceA::spaceB; //error
//方式三:在命名空间中的成员前,加上命名空间
// 命名空间名字::变量名或对象名
int j = 222; //全局变量
void namespaceTest()
{
//使用变量j,必须限定作用域,否则二义性ambiguity
cout << "spaceA::spaceB::j=" << spaceA::spaceB::j << endl; //output:spaceA::spaceB::j=111
//全局作用域的名字空间是匿名的,引用全局作用域符号只需加 :: 即可。
cout << "全局变量j=" << ::j << endl; //output:全局变量j=222
//名字空间的本质就是作用域,遵守C语言关于作用域的基本原则,如小作用域重名符号会掩盖大作用域的重名符号
int j = 123;
cout << "j="<< j << endl; //output: j=123
//小作用域重名符号(int b)会掩盖大作用域的重名符号(space::b)
int b = 999;
cout << "b="<< b << endl; //output: b=999
//方式三:
spaceA::spaceB::c = 30; //命名空间中嵌套的成员使用
spaceA::b = 30;
point p = {3,5};
cout << "p("<< p.x << ","<< p.y << ")" << endl; //p(3,5)
}
注意:
全局作用域的名字空间是匿名的,引用全局作用域符号只需加 :: 即可。
名字空间的本质就是作用域,遵守C语言关于作用域的基本原则,如小作用域重名符号会掩盖大作用域的重名符号