C++基本语法【C++深度学习部署(二)】

1、C++程序结构

1.1 C++程序的基本组成部分

A、关键字
在这里插入图片描述
B、标识符、操作符、标点

1、include,main,cin,cout,favorite_num是标识符,
2、 + - * /,<<(流插入),>>(流提取),::(作用域运算符,表示一种从属的关系)等是操作符,
3、 ;和()以及{}是标点,
4、int,return是关键字,

标识符和关键字的区别
标识符是程序员自己定义的,主要用来标识变量,函数,类,模块等用户定义项的名称;

在这里插入图片描述

1.2 预处理指令

1、它指示编译器在实际编译开始之前预处理信息,
2、以#开头,不以分号 ; 结尾,
3、并不理解C++语法

在这里插入图片描述

1.3 注释

在这里插入图片描述

1.4 main() 主函数

一个C++程序必须有且只能有一个main函数,当程序运行时main函数会被操作系统所调用,

在这里插入图片描述
例子1:

#include<iostream>
using namespace std;

int main()
{
    cout << "hello now" << endl;
    return 0;
}

输出:

hello now

例子2,程序本身也是一个参数,

#include <iostream>
using namespace std;

int main(int argc, char **argv) 
{
    cout << "参数数量:"<<argc <<endl;
    cout << "======参数列表======"<<endl;
    for (int i {0};i<argc; i++)
    {
        cout << "参数:"<<argv[i] <<endl;
    }
}

输出:

参数数量:1
======参数列表======
参数:c:\Users\22828\Desktop\CPP_project\course_2\src\2.main_type
1.5 命名空间 namespace

为了避免自己写的代码和别人写的代码的命名冲突,所以引入命名空间,

以下是命名空间的2种使用方式,

在这里插入图片描述
在这里插入图片描述

2、 C++的变量和常量

2.1 变量

用名称代替地址访问变量

在这里插入图片描述

1、变量是内存地址的抽象
2、变量有2个重要的属性:
Type:变量类型(integer、real number、string、Person、Student)
Value:变量值(1,3.14,”computer”)

2.2 变量的声明

变量的声明

也可以使用自定义的类来定义数据类型,

在这里插入图片描述

变量的初始化

推荐采用C++11标准初始化,如果没有进行初始化,编译器会给出一个随机的数字,比如0,

在这里插入图片描述
一个例子:

#include <iostream>
using namespace std;

// 这个例子可以计算房间面积
int main()
{
    int room_width {0};
    cout << "请输入房间的宽度:";
    cin >> room_width;

    int room_length {0};
    cout << "请输入房间的长度:";
    cin >> room_length;

    cout << "房间面积是:" << room_width * room_length << "平方米" << endl;

    return 0;

}
2.3 变量的类型
  • 字符型(character):char
  • 整型(integer):short、int、long、long long
  • 浮点型(floating point):float、double
  • 布尔型(Boolean):bool
  • 不同类型的分配内存大小和取值范围和OS平台和编译器版本有关

首先介绍一下Bits(⽐特) & bytes(字节)

  • 1⽐特是存储的最⼩单位
  • 1⽐特只能存储0或者1
  • 模式数量 = 2 比特数量 2^{比特数量} 2比特数量

在这里插入图片描述

  • 1字节 = 8⽐特
  • 1字节能表达的模式数量 = 2^8 = 256个
  • 可以⽤来存储 0-255 数字
  • 适合存储字符(characters)/ 字⺟(letters)

在这里插入图片描述

A、 字符型

  • 作⽤:⽤于表示单个字符,如’@’, ’a’, ’X’
  • 只占⽤1个字节
  • 语法:char c = ‘a’;
  • 注意:
  • 需要和字符串区分开,⽤单引号不是双引号
  • 存储的是字符的ASCII编码,⽽不是字符本身

ASCII编码:

在这里插入图片描述

B、整型

作⽤:表示整数类型的数据

在这里插入图片描述

C、浮点型

  • 作⽤:表示⼩数
  • 浮点型主要有2种:float(单精度)、double(双精度)
  • 注意:有效数字包含整数部分,⽐如3.14159 是6个有效数字

在这里插入图片描述

D、布尔型(Boolean)

  • 作⽤:表示真(true)或者假(false)
  • 占⼀个字节
  • 0表示假,⾮0表示真
  • 语法:bool add_to_cart {false};

代码:

#include <iostream>
using namespace std;

int main(){
    // 字符型
    cout << "====================" << endl;
    char my_char {'j'}; // 注意是单引号,双引号是string类型
    cout << "my char: " << my_char << endl;


    // 整型
    cout << "====================" << endl;
    short my_score {59}; 
    cout << "my score: " << my_score << endl;

    // = 与 {} 的区别
    // short 范围-32768(-2^15) to 32767(2^15-1),overflow溢出案例
    short overflow_num_1  = 32768; // 不会报错,但是值会变成-32768
    cout << overflow_num_1 << endl; // -32768

    // short overflow_num_2 {32768}; // 编译器会做校验,会报错,所以推荐使用{}
    // cout << overflow_num_2 << endl; // -32768

    int my_height {178};
    cout << "my height: " << my_height << endl;

    long people_in_hangzhou {10360000};
    cout << "people in hangzhou: " << people_in_hangzhou << endl;

    long long people_on_earth {80'0000'0000}; // 为方便阅读c++ 14标准后支持'数字分割
    cout << "people on earth: " << people_on_earth << endl;

    // 浮点型
    cout << "====================" << endl;
    float book_price {32.23f}; // 加上f表示float类型,因为默认是double类型
    cout << "book price: " << book_price << endl;

    double pi {3.14149};
    cout << "pi: " << pi << endl;
    
    // 布尔型
    cout << "====================" << endl;
    bool add_to_cart {false};
    // cout << boolalpha; // 以bool的形式输出
    cout << "add to cart: " << add_to_cart << endl; // 0表示false

    return 0;
}

E、sizeof和climits
在这里插入图片描述

代码:

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    cout << "size information" << endl;
    cout << "================================================================" << endl;

    cout << "char:" << sizeof(char) << " bytes." << endl;
    cout << "short:" << sizeof(short) << " bytes." << endl;  
    cout << "int:" << sizeof(int) << " bytes." << endl;
    cout << "long:" << sizeof(long) << " bytes." << endl;
    cout << "long long:" << sizeof(long long) << " bytes." << endl;

    cout << "================================================================" << endl;

    cout << "float:" << sizeof(float) << " bytes." << endl;
    cout << "double:" << sizeof(double) << " bytes." << endl;

    cout << "================================================================" << endl;

    cout << "min and max value defined in climits" << endl;
    cout << "char min:" << CHAR_MIN << ",char max:" << CHAR_MAX << endl;
    cout << "short min:" << SHRT_MIN << ",short max:" << SHRT_MAX << endl;  
    cout << "int min:" << INT_MIN << ",int max:" << INT_MAX << endl;
    cout << "long min:" << LONG_MIN << ",long max:" << LONG_MAX << endl;
    cout << "long long min:" << LLONG_MIN << ",long long max:" << LLONG_MAX << endl;

    cout << "================================================================" << endl;
    cout << "sizeof using variables" << endl;
    int age {31};
    cout << "age is " << sizeof(age) << " bytes" << endl;

    double salary {22.34};
    cout << "salary is " << sizeof(salary) << " bytes" << endl;

    return 0;

}

输出:

size information
================================================================
char:1 bytes.
short:2 bytes.
int:4 bytes.
long:4 bytes.
long long:8 bytes.
================================================================
float:4 bytes.
double:8 bytes.
================================================================
min and max value defined in climits
char min:-128,char max:127
short min:-32768,short max:32767
int min:-2147483648,int max:2147483647
long min:-2147483648,long max:2147483647
long long min:-9223372036854775808,long long max:9223372036854775807
================================================================
sizeof using variables
age is 4 bytes
salary is 8 bytes

F、常量

作⽤:记录不可更改的数据,防⽌变量误修改

在这里插入图片描述

代码:

#include <iostream>
using namespace std;

int main()
{
    const double pi {3.14159}; // 常量
    cout << "输入半径: ";
    double radius {0};
    cin >> radius;
    cout << "圆的面积是: " << pi * radius * radius << endl;
    
    return 0;
}

3、C++ 数组和容器

3.1 数组(array)
  • 数组所有元素都是同⼀个数据类型
  • 每个元素可以单独读取
  • 长度大小固定,且不可以再修改
  • 所有元素是同⼀类型
  • 元素在内存中是连续存储的
  • 声明array时,内存中会分配⼀块区域来存储
  • 可以使⽤存储的索引位置来获取元素(从0开始,最后⼀个元素索引为 size -1)
  • 不检查是否超出区域(超出⻓度获取元素可能会报错)

在这里插入图片描述

A、数组的声明

elementType array_name [size];
elementType表示数组中元素的类型,array_name表示数组的名字,size表示数组的大小,

在这里插入图片描述

B、数组的初始化

elementType array_name [size] {初始化列表};

在这里插入图片描述

C、数组元素的获取及更新
在这里插入图片描述

代码:

#include <iostream>
using namespace std;

int main(){
    
    char vowels[] {'a', 'e', 'i', 'o', 'u'};
    cout << "元音字母第1个字母为:" << vowels[0] << endl;
    cout << "元音字母第5个字母为:" << vowels[4] << endl;

    // cin >> vowels[5]; // 试图访问数组的第6个元素,程序会崩溃

    double hi_temps[] {90.1, 89.8, 77.5, 81.6};
    cout << "第1天的最高温度为:" << hi_temps[0] << endl;
    hi_temps[0] = 100.7; // 修改第1天的最高温度
    cout << "第1天的最高温度为:" << hi_temps[0] << endl;
    cout << "第6天的最高温度为:" << hi_temps[5] << endl; // 越界访问,可能会得到一个随机值

    cout << "=====================" << endl;

    // int student_scores [5]; // 5个整数的数组,但是没有初始化,数组中的值是未定义的
    // cout << "第1个学生的成绩为:" << student_scores[0] << endl; // 未初始化的数组中的值是未定义的

    int student_scores [5] {}; // 5个整数的数组,初始化为0
    // int student_scores [5] {100}; // 5个整数的数组,初始化为100,其他元素初始化为0,并不是所有的元素都初始化为100

    cout << "第1个学生的成绩为:" << student_scores[0] << endl;
    cout << "第2个学生的成绩为:" << student_scores[1] << endl;
    cout << "第3个学生的成绩为:" << student_scores[2] << endl;
    cout << "第4个学生的成绩为:" << student_scores[3] << endl;
    cout << "第5个学生的成绩为:" << student_scores[4] << endl;

    cout << "重新输入5个学生的成绩:";
    cin >> student_scores[0];
    cin >> student_scores[1];
    cin >> student_scores[2];
    cin >> student_scores[3];
    cin >> student_scores[4];

    cout << "更新后的成绩:" << endl;
    cout << "第1个学生的成绩为:" << student_scores[0] << endl;
    cout << "第2个学生的成绩为:" << student_scores[1] << endl;
    cout << "第3个学生的成绩为:" << student_scores[2] << endl;
    cout << "第4个学生的成绩为:" << student_scores[3] << endl;
    cout << "第5个学生的成绩为:" << student_scores[4] << endl;

    cout << "数组名称为:" << student_scores << endl; // 数组名称为数组的首地址

    cout << "=====================" << endl;
    // 定义一个2维数组
    int movie_ratings [3][4] {
        {0, 4, 3, 5},
        {2, 3, 3, 5},
        {1, 4, 4, 5}
    };
    cout << "第1部电影的第1个评分为:" << movie_ratings[0][0] << endl;
    cout << "第2部电影的第4个评分为:" << movie_ratings[1][3] << endl;


    return 0;
}
3.2 容器(vector)

容器的提出:

  • 假设需要存储整个学校所有学⽣的考试成绩
  • ⽆法知道具体的学⽣数量
  • 解决办法:
  • 使⽤数组,数组⼤⼩设置的⾜够⼤
  • 使⽤vector 动态数组

什么是容器(vector)?

  • c++ 标准模板库STL中的容器(container)
  • 长度大小可以随时缩放
  • 和数组类似的语法⽤法
  • ⾼性能
  • 越界检查
  • 很多有⽤的函数:sort, reverse, find等

A、容器(vector)的声明
在这里插入图片描述

在这里插入图片描述
B、容器(vector)的初始化

如下图最后一种初始化是长度为365的容器,初始值都为37.0,

在这里插入图片描述
C、容器的性质

  • 动态调整大小
  • 所有元素是同⼀类型
  • 元素在内存中是连续存储的
  • 可以使⽤存储的索引位置来获取元素
  • 从0开始,最后⼀个元素索引为 size -1
  • [ ]⽅式获取元素,提供了函数做越界检查
  • 性能非常高
  • 所有元素会初始化到0

D、获取容器元素

在这里插入图片描述

在这里插入图片描述

E、追加元素
在这里插入图片描述

F、越界检查
在这里插入图片描述

代码:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    // vector<char> vowels; // 空的vector
    // vector<char> vowels(5); // 5个元素的vector,初始化为0
    
    vector <char> vowels {'a', 'e', 'i', 'o', 'u'};  // 5个元素的vector,初始化为元音字母

    cout << vowels[0] << endl; // 访问第1个元素
    cout << vowels[4] << endl; // 访问第5个元素

    // vector <int> student_scores (3); // 3个整数的vector,初始化为0,使用的是默认构造函数
    // cout << student_scores[0] << endl; // 访问第1个元素

    // vector <int> student_scores (3,100); // 3个整数的vector,初始化为100,使用的是带参数的构造函数
    // cout << student_scores[0] << endl; // 访问第1个元素

    vector <int> student_scores {100, 99, 98}; // 3个整数的vector,初始化为100,99,98,使用的花括号初始化
    cout << "array风格访问:" << endl;
    cout << "三个学生的成绩为:" << student_scores[0] << " " << student_scores[1] << " " << student_scores[2] << endl;

    cout << "====================" << endl;
    cout << "vector风格访问:" << endl;
    cout << "三个学生的成绩为:" << student_scores.at(0) << " " << student_scores.at(1) << " " << student_scores.at(2) << endl;
    cout << "vector大小为:" << student_scores.size() << endl;

    cout << "====================" << endl;
    cout << "修改vector中的元素:";
    cin >> student_scores.at(0);
    cin >> student_scores.at(1);
    cin >> student_scores.at(2);
    cout << "修改后的三个学生的成绩为:" << student_scores.at(0) << " " << student_scores.at(1) << " " << student_scores.at(2) << endl;

    cout << "====================" << endl;
    int new_add_score {0};
    cout << "添加新的成绩:";
    cin >> new_add_score;
    student_scores.push_back(new_add_score);
    cout << "再添加一个新的成绩:";
    cin >> new_add_score;
    student_scores.push_back(new_add_score);
    
    cout << "添加后一共有" << student_scores.size() << "个成绩,分别为:" << endl;
    cout << "第1个成绩为:" << student_scores.at(0) << endl;
    cout << "第2个成绩为:" << student_scores.at(1) << endl;
    cout << "第3个成绩为:" << student_scores.at(2) << endl;
    cout << "第4个成绩为:" << student_scores.at(3) << endl;
    cout << "第5个成绩为:" << student_scores.at(4) << endl;


    // cout << "故意访问不存在的元素:" << endl;
    // cout << "第6个成绩为:" << student_scores.at(5) << endl; // 故意访问不存在的元素,会报错

    cout << "====================" << endl;
    // 定义二维vector
    vector <vector<int>> vector_2d
    {
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };

    cout << "array风格打印二维vector第一行:" << endl;
    cout << vector_2d[0][0] << " " << vector_2d[0][1] << " " << vector_2d[0][2] << endl;
    cout << "vector风格打印二维vector第二行:" << endl;
    cout << vector_2d.at(1).at(0) << " " << vector_2d.at(1).at(1) << " " << vector_2d.at(1).at(2) << endl;
}

4、C++ 程序流程

关于C++程序流程,可参考我写的另外一个博客CSDN全息数据博客

• 顺序执⾏(Sequence)
• 指令按先后顺序执⾏

• 条件分⽀(Selection)
• 做决定

• 循环(Iteration)
• 重复执⾏某任务

4.1 if else

语法格式:
if(条件)
{条件满足执行的语句}
else
{条件不满足执行的语句}

代码1:

#include <iostream>
using namespace std;

int main(){
    int input_num {0};
    const int lower_limit {10};
    const int upper_limit {100};
    
    cout << "请输入一个介于" << lower_limit << "和" << upper_limit << "之间的整数:";
    cin >> input_num;

    if(input_num >= lower_limit){
        cout << "===========条件1============" << endl;
        cout << input_num << "大于等于" << lower_limit << endl;
        cout << input_num << "比" << lower_limit << "大" << (input_num - lower_limit) << endl;
    }
    if(input_num <= upper_limit){
        cout << "===========条件2============" << endl;
        cout << input_num << "小于等于" << upper_limit << endl;
        cout << input_num << "比" << upper_limit << "小" << (upper_limit - input_num) << endl;
    }
    if(input_num >= lower_limit && input_num <= upper_limit){
        cout << "===========条件3============" << endl;
        cout << input_num << "介于" << lower_limit << "和" << upper_limit << "之间" << endl;
        cout << "条件1、2都成立" << endl;
    }
    if(input_num == lower_limit || input_num == upper_limit){
        cout << "===========条件4============" << endl;
        cout << input_num << "在边界点上" << endl;
        cout << "条件1、2、3都成立" << endl;
    }


    return 0;
}

代码2:

#include <iostream>
using namespace std;

int main()
{
    int input_num {0};
    const int target_num {50};

    cout << "请输入一个整数,我将与" << target_num << "比较:";
    cin >> input_num;

    if (input_num <= target_num){
        cout << "================条件1================" << endl;
        cout << input_num << "小于等于" << target_num << endl;
        cout << input_num << "比" << target_num << "小" << (target_num - input_num) << endl;
    }else{
        cout << "================条件2================" << endl;
        cout << input_num << "大于" << target_num << endl;
        cout << input_num << "比" << target_num << "大" << (input_num - target_num) << endl;
    }
    return 0;
}
4.2 switch

作用:执行多条件分支语句
switch和if语句的区别:
1、switch判断的条件只能是整型或字符型,不能是一个区间;
2、结构清晰,执行效率高;
注意
case里面如果没有break,程序会一直向下执行;

代码1:

#include <iostream>
using namespace std;

int main()
{
    char letter_grade {};
    cout << "请输入你的成绩:";
    cin >> letter_grade;

    switch (letter_grade){
        case 'a':
        case 'A':
            cout << "优秀" << endl;
            break;
        case 'b':
        case 'B':
            cout << "良好" << endl;
            break;
        case 'c':
        case 'C':
            cout << "中等" << endl;
            break;
        case 'd':
        case 'D':
            cout << "及格" << endl;
            break;
        default:
            cout << "输入错误" << endl;

    }
    return 0;
}

代码2:

#include <iostream>
using namespace std;

int main()
{
    enum Traffic_light {red, yellow, green}; // 枚举类型
    Traffic_light light_color {yellow};

    switch (light_color){
        case red:
            cout << "红灯" << endl;
            break;
        case yellow:
            cout << "黄灯" << endl;
            break;
        default: // 必须加上default,否则编译器会警告
            cout << "ok" << endl;
    }

}
4.3 for循环

作用: 满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}

for循环的基本形式:
在这里插入图片描述

在起始表达式完成变量的声明和初始化;
在这里插入图片描述

遍历数组:
在这里插入图片描述

逗号的分割使用:
在这里插入图片描述

无参数,无限循环,
在这里插入图片描述

代码1:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    // 简单的for demo
    // for(int i {1}; i <= 10; ++i)
    //     cout << i << endl;



    // 每次i增加2
    // for (int i {1}; i <= 10; i += 2)
    //     cout << i << endl;



    // 从10递减到1
    // for (int i {10}; i >= 1; --i)
    //     cout << i << endl;


    
    // 循环中添加if语句
    // for (int i {1}; i <= 10; ++i){
    //     if (i % 2 == 0)
    //         cout << i << "是偶数" << endl;
    //     else
    //         cout << i << "是奇数" << endl;
    // }



    // 2个参数
    for (int i {1}, j {5}; i <= 5; ++i, ++j)
        cout << i << " * "<< j << " = " << (i * j) << endl;


    // 遍历vector
    vector <int> nums {1,2,3,4,5,6,7,8,9,10}; // 初始化vector

    for (unsigned i {0}; i < nums.size(); ++i) // 要使用unsigned,否则会报警,因为size()是long unsigned int,所以要统一好数据类型
        cout << nums[i] << endl;
        
    return 0;
}

基于范围的循环:
在这里插入图片描述

for—— auto类型: 代码注释的“耗时”是自己确认数据类型的时间

在这里插入图片描述

for—— 解析vector:

在这里插入图片描述

for—— 解析序列:

在这里插入图片描述

for—— 解析字符串:

在这里插入图片描述

代码2:

#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

int main()
{
    // int student_scores [] {100, 98, 90, 86, 84}; // 初始化数组
    // for (auto score: student_scores)
    //     cout << score << endl;





    // // 计算平均温度
    // vector <double>  temps {23.1,22.9,19.3,23.2}; // 初始化vector
    // double temp_average {};
    // double temp_total {};

    // for (auto temp: temps)
    //     temp_total += temp;

    // if (temps.size() != 0)
    //     temp_average = temp_total / temps.size();
    
    // // 设置精度
    // cout << fixed << setprecision(1);
    // cout << "平均温度:" << temp_average << endl;




    // // 初始化的列表
    // for (auto i: {1,2,3,4,5,6,7,8,9,10})
    //     cout << i << endl;

    // return 0;


    // 遍历string 字符串
    for (auto c: "This is a test")
        cout << c;
    cout << endl;
}
4.4 while 循环

作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句}
解释:只要循环的条件为真就会执行循环语句

在这里插入图片描述

在这里插入图片描述

while——打印偶数:

在这里插入图片描述

while——遍历数组:

在这里插入图片描述

while——输⼊验证:

在这里插入图片描述

4.5 do-while

作用:满足循环条件,执行循环语句;如果满足循环条件,则继续执行循环体内的代码;否则跳出循环
语法:do{循环语句}while(循环条件)

与while的区别:

do…while会先执行循环语句,再判断循环条件,与while正好相反

在这里插入图片描述

代码:

#include <iostream>
using namespace std;

int main()
{
   
    // 输入菜单
    char input_char {};
    do {
        cout << "\n 菜单:" << endl;
        cout << "1. 打印Hello World" << endl;
        cout << "2. 打印Hello C++" << endl;
        cout << "3. 打印Hello C" << endl;
        cout << "q或Q. 退出" << endl;

        cout << "请输入菜单选项:";
        cin >> input_char;

        cout << endl;

        switch (input_char)
        {
            case '1':
                cout << "Hello World" << endl;
                break;
            case '2':
                cout << "Hello C++" << endl;
                break;
            case '3':
                cout << "Hello C" << endl;
                break;
            case 'q':
            case 'Q':
                cout << "退出" << endl;
                break;
            default:
                cout << "输入错误" << endl;
                break;
        }

    } while (input_char != 'q' && input_char != 'Q');

    return 0;
}

5、C++ 字符和字符串

5.1 C++借用C风格字符串

C++存储C风格字符串时,字符串使用的是双引号,每个字符串会多存储1个字符大小 \0 作结束符号;

在这里插入图片描述

在C++中,字符串不能直接赋值给字符数组,你需要使用strcpy函数来复制字符串到字符数组,

在这里插入图片描述

cstring函数:

在这里插入图片描述

代码:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    // 全部初始化为空
    char first_name [20] {};
    char last_name [20] {};
    char full_name [50] {};
    char temp [50] {};

    // // 用户输入
    // cout << "请输入您的姓:";
    // cin >> first_name;
    // cout << "请输入您的名:";
    // cin >> last_name;

    // cout << "----------------------------------------" << endl;
    // cout << "您的姓:" << first_name << ",一共有 " << strlen(first_name) << " 个字符" << endl;
    // cout << "您的名:" << last_name << ",一共有 " << strlen(last_name) << " 个字符" << endl;

    // // 拼接名字
    // strcpy(full_name, first_name); // 拷贝 first_name 到 full_name
    // strcat(full_name, " "); // 拼接空格
    // strcat(full_name, last_name); // 拼接 last_name
    // cout << "您的全名是:" << full_name << endl;




    // cout << "----------------------------------------" << endl;
    // cout << "请输入您的全名:";
    // cin >> full_name; // 有空格的话,只会读取到空格前的内容
    // cout << "您的全名是:" << full_name << endl;


    cout << "----------------------------------------" << endl;
    cout << "请输入您的全名:";
    cin.getline(full_name, 50);  // 读取一行,包括空格
    cout << "您的全名是:" << full_name << endl;


    cout << "----------------------------------------" << endl;
    // 比较字符串
    strcpy(temp, full_name); // 拷贝 full_name 到 temp

    if (strcmp(temp, full_name) == 0) // 比较 temp 和 full_name

        cout << temp << " 和 " << full_name << " 是相同的" << endl;
    else
        cout << temp << " 和 " << full_name << " 是不同的" << endl;


    cout << "----------------------------------------" << endl;
    // 将字符串转换为大写
    for(size_t i {0}; i < strlen(full_name); i++){
        if (isalpha(full_name[i])){ // 判断是否是字母
            full_name[i] = toupper(full_name[i]); // 转换为大写
        }else{
            full_name[i] = '*';
        }
        
    }
    cout << full_name << endl;


    return 0;
}
5.2 C++风格字符串
  • Std::string 是STL中⼀个类
  • 使⽤前必须要导⼊#include <string>
  • std namespace
  • 内存中连续,动态⼤⼩
  • 可转c-style字符串相互转化
  • 提供越界检查,更安全

A、声明和初始化

在这里插入图片描述

B、赋值

在这里插入图片描述

C、拼接

在这里插入图片描述

D、获取字符,更新

在这里插入图片描述

E、遍历

在这里插入图片描述

代码:

#include <string>
#include <iostream>

using namespace std;

int main()
{
    // 声明和初始化
    // string s1; // 全部初始化为空
    // string s2 {"hello"}; // 初始化为 hello
    // string s3 {s2}; // 拷贝 s2
    // string s4 {s3, 0, 4}; // 拷贝 s3 的前 4 个字符
    // string s5 {"hello", 3}; // 拷贝 hello 的前 3 个字符
    // string s6 (5, 'x'); // 5 个 x

    // // 打印s1、s2、s3、s4、s5、s6
    // cout << "s1 is empty: " << s1 << endl;
    // cout << "s2 is: " << s2 << endl;
    // cout << "s3 is: " << s3 << endl;
    // cout << "s4 is: " << s4 << endl;
    // cout << "s5 is: " << s5 << endl;
    // cout << "s6 is: " << s6 << endl;


    // // 赋值
    // string s1;
    // s1 = "C++ hello world";
    // cout << "s1 is: " << s1 << endl;

    // string s2 {"course"};
    // cout << "s2 is: " << s2 << endl;
    // s2 = s1;
    // cout << "s2 is: " << s2 << endl;


    // // 拼接
    // string part1 {"C++"};
    // string part2 {"是一门强大的"};
    // string sentence;
    // sentence = part1 + " " + part2 + "语言";
    // cout << sentence << endl;

    // // sentence = "C++" + "是一门强大的语言"; // 错误,不能将2个c-style字符串字面量相加


    // // 获取字符,更新
    // string s1 {"Hello"};
    // // 获取元素
    // cout << s1[1] << endl; // e
    // cout << s1.at(2) << endl; // l

    // // 重新赋值
    // s1[1] = 'a'; // Hallo
    // s1.at(2) = 'X'; // HaXlo
    // cout << s1 << endl;


    // // 遍历
    // string s1 {"Hello"};
    // for(auto c: s1){ // 可以使用char或auto
    //     cout << c << endl;
    // }


    // for(int c: s1){ // 打印出来的是ASCII码
    //     cout << c << endl;
    // }


    return 0;
}

如果本博客对你有帮助,请点赞收藏吧😊😊😊

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习如何部署网站和上线是一个关键的技能,以下是一个学习路线的建议: 1. 学习基本的服务器知识:了解服务器的基本概念、工作原理和常用的操作系统(如Linux)以及网络协议等。 2. 学习基本的网络知识:了解域名解析、IP地址、HTTP协议等基本的网络概念和技术。 3. 学习服务器配置:掌握如何配置服务器环境,包括安装和配置Web服务器(如Apache、Nginx)、数据库服务器(如MySQL、PostgreSQL)等。 4. 学习版本控制工具:使用版本控制工具(如Git)管理代码,了解代码的版本控制、合并和分支等概念。 5. 学习基本的Linux命令行操作:熟悉Linux系统的基本命令,包括文件操作、目录管理、进程控制等。 6. 学习服务器安全:了解服务器安全的基本原理和常用的安全措施,包括防火墙设置、SSH安全访问等。 7. 学习容器化和虚拟化技术:了解Docker等容器化技术和虚拟化技术,可以帮助简化部署和管理过程。 8. 学习持续集成与持续部署:了解CI/CD(Continuous Integration/Continuous Deployment)的概念和工具,如Jenkins、Travis CI等。 9. 实践项目部署:在学习的过程中,尝试将自己的项目部署到云服务器或虚拟机上,通过配置域名、安装服务器环境、上传代码等步骤完成项目的上线。 10. 学习监控和日志管理:了解常用的监控工具和日志管理工具,如Prometheus、Grafana、ELK Stack等,可以帮助你实时监控和管理网站或应用。 请注意,这只是一个大致的学习路线,实际的学习过程中可能需要不断地深入学习和实践,并根据具体项目和需求进行适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值