C++扩展之:String字符串、bool类型、命名空间、域操作符

一、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语言关于作用域的基本原则,如小作用域重名符号会掩盖大作用域的重名符号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值