C++基本语法【恩培学习笔记(一)】

news2024/12/24 20:56:04

文章目录

      • 1、C++程序结构
        • 1.1 C++程序的基本组成部分
        • 1.2 预处理指令
        • 1.3 注释
        • 1.4 main() 主函数
        • 1.5 命名空间 namespace
      • 2、 C++的变量和常量
        • 2.1 变量
        • 2.2 变量的声明
        • 2.3 变量的类型
      • 3、C++ 数组和容器
        • 3.1 数组(array)
        • 3.2 容器(vector)
      • 4、C++ 程序流程
        • 4.1 if else
        • 4.2 switch
        • 4.3 for循环
        • 4.4 while 循环
        • 4.5 do-while
      • 5、C++ 字符和字符串
        • 5.1 C++借用C⻛格字符串
        • 5.2 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或者
• 模式数量 = 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 作结束符号;

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

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
• 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1098156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建scala项目并增加新的object试运行

一、创建scala项目 依赖配置&#xff1a; scala&#xff0c;jdk&#xff0c;maven 没有maven也可以创建 1.1 直接创建 1.1.1 创建 选择新project 路径、依赖配置、代码调试 1.1.2 项目结构 Scala项目中几个文件&#xff1a; .idea&#xff1a;这个文件夹是用来存储项目的…

Android酒店客房预订系统 后台管理+前端app 包含视频教程

【项目功能介绍】 功能列表: 本系统包含后台管理和前端app双端系统, 本系统包含三个角色: 管理员,员工,app用户。 后台管理员的功能包含: 登录, 退出, ,酒店管理,添加酒店,修改酒店,禁用启用酒店; 酒店客房管理,添加客房,修改客房,启用禁用客房; 订单管理,确定订单,拒绝订单,用…

Android视音频知识

Android视音频知识 视音频完整解码播放流程分析。 视音频完整录制编码流程分析。 为什么要编码&#xff0c;如何编码(编码原理) ?。 为什么要编码&#xff1f; 因为视频文件实在太大了&#xff0c;一部电影 200多个GB&#xff0c;编码&#xff1a;1G 视频是连续的图像序列&a…

【Linux】chmod 命令使用

chmod&#xff08;英文全拼&#xff1a;change mode&#xff09;命令是控制用户对文件的权限的命令。 chmod命令 -Linux手册页 著者 作者&#xff1a;David MacKenzie和Jim Meyering。 语法 chmod [选项] [模式] 文件或目录 Linux/Unix 的文件调用权限分为三级 : 文件所有者…

Spring-AOP-加强

目录 简略介绍 AOP是如何实现的 实现时机 实现原理 简略介绍 AOP(Aspect-Oriented Programming)&#xff0c;即面向切面编程&#xff0c;用人话说就是把公共的逻辑抽出来&#xff0c;让开发者可以更专注于业务逻辑开发和IOC一样&#xff0c;AOP也指的是一种思想AOP思想是OO…

自动化测试框架中如何记录日志更加已读 ?一文介绍使用loguru来管理日志的心得。

只要做代码开发&#xff0c;记录日志必不可少的 &#xff0c;对于像我这样的测试开发同学也是 &#xff0c;你在编写自动化时如何记录日志 &#xff1f;怎么要日志记录更容易已读 &#xff1f;如何备份日志文件 &#xff1f; 这都是我们在编写代码时要考虑的问题 &#xff0c;如…

JNI 的数据类型以及和Java层之间的数据转换

JNI的数据类型和类型签名 数据类型 JNI的数据类型包含两种&#xff1a;基本类型和引用类型。 基本类型主要有jboolean、jchar、jint等&#xff0c;它们和Java中的数据类型的对应关系如下表所示。 JNI中的引用类型主要有类、对象和数组&#xff0c;它们和Java中的引用类型的对…

ICC2:如何抓取“no net“的shape和via

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 pr过程中(尤其是eco)会产生一些no net的shape或via&#xff0c;它们会造成drc和lvs问题&#xff0c;但是常规的办法无法把他们抓出来&#xff0c;下面分享可以获取no net的方法…

数字化时代下,汽车行业如何突破现有营销困境?

之前三年的“口罩”时期&#xff0c;给全球和中国汽车市场带来不小影响&#xff0c;汽车销售市场整体下滑&#xff0c;传统营销模式很难适应现阶段汽车营销需求&#xff0c;那么在当下&#xff0c;汽车行业应该如何突破现有营销困境呢&#xff1f;接下来就由媒介盒子跟大家聊聊…

如何同步 Github 和 Gitee的仓库代码

一、从github导入仓库&#xff0c;手动同步 在 Gitee 的项目主页&#xff0c;导入的仓库会会有一个同步的按钮&#xff0c;你只用点一下&#xff0c;即可与 Github 同步更新&#xff0c;但是注意这里的同步功能默认是强制同步。有点麻烦的是&#xff0c;我们需要在推送到 Githu…

推理成本增加10倍?对文心大模型4.0的一些猜想

夕小瑶科技说 原创 作者 | 卖萌酱 大家好&#xff0c;我是卖萌酱。 相信不少小伙伴这几天都听到了消息&#xff0c;在期待下周即将发布的文心大模型4.0。我们的几个读者群里也发生了相关的讨论&#xff1a; 讨论的核心主要围绕以下两个话题展开&#xff1a; 文心4.0能不能打过…

git操作说明

SourceURL:file:///home/kingqi/桌面/git操作说明.doc 本地建立仓库 mkdir namebao cd namebao pwd git init 初始化 cd .git/ gedit config 本地存储 进入目录上传全部文件 git add . 提交 git commit -m “说明” 远程提交 复制gitee或者github仓库链接 可以直…

前端开发tips

vue配置启动项目自动打开浏览器 打开package.json找到启动命令npm run dev 跟npm run serve(这两种命令都可以) 后面增加 --open Vue项目设置路径src目录别名为 Vue2 编辑vue.config.js内容如下&#xff1a; const { defineConfig } require(vue/cli-service)const path…

使用Cython对Python进行提速优化

因为常常使用Python&#xff0c;经常能感觉到和C&#xff0c;Java来说Python的速度太慢了。其中很大程度上是因为Python的类型是动态的&#xff0c;在解释类型方面花了较长时间。在调研过程中&#xff0c;发现给Python提速一个比较可行的方案是用Cython改写。 Cython的原理&am…

零售数据分析师熬夜整理:人、货、场、供、财这样做

在零售数据分析中&#xff0c;人、货、场、供、财数据分析非常重要&#xff0c;它们分别是指人员、商品、场所、供应和财务&#xff0c;对这些要素进行数据分析&#xff0c;可以更好地了解市场需求、优化商品供应链、调整销售策略和提高盈利能力。零售数据量大、分析指标多且复…

蓝桥·算法双周赛

文章目录 三带一数树数分组健身契合匹配奇怪的线段 一、三带一 本题思路:本题看了数据范围可以直接暴力解决。 #include <bits/stdc.h>int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T;std::cin>>T;while(T-…

C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析

Reddit 是一个非常受欢迎的分享社交新闻聚合网站&#xff0c;用户可以在上面发布和内容。我们的目标是抓取 Reddit 首页的数据 JSON&#xff0c;以便进一步分析和使用。 C#技术概述&#xff1a;C#是一种流行的编程语言&#xff0c;它具有流畅流畅的特点&#xff0c;非常适合开发…

用手势识别来测试视力?试试用百度AI来实现想法

文章目录 ⭐ 前言⭐ 灵感来源⭐ 项目准备⭐ 项目实现⭐ 不足与展望 ⭐ 前言 10月17日&#xff0c;以“生成未来&#xff08;PROMPT THE WORLD&#xff09;”为主题的百度世界2023将在北京首钢园举办。百度创始人、董事长兼首席执行官李彦宏将带来以“手把手教你做AI原生应用”…

【微信小程序开发】基础语法篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.视图层 1.数据绑定 wxml js 2 .列…

android CountDownTimer倒计时随时随地开启或关闭

前言 业务上有个需求&#xff0c;在心跳被触发时需要记录一个时间 当心跳断开后120s需要断开连接 如果收到心跳包就重置这个定时器的时间 代码实现 private CountDownTimer mTimer; private boolean mIsTimerRunning false;if (!mIsTimerRunning) {// 启动定时器startTimer…