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

文章目录

      • 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; // 不会报错,但是值会变成-32768cout << overflow_num_1 << endl; // -32768// short overflow_num_2 {32768}; // 编译器会做校验,会报错,所以推荐使用{}// cout << overflow_num_2 << endl; // -32768int 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表示falsereturn 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,并不是所有的元素都初始化为100cout << "第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,初始化为0vector <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;// 定义二维vectorvector <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;// 遍历vectorvector <int> nums {1,2,3,4,5,6,7,8,9,10}; // 初始化vectorfor (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 到 tempif (strcmp(temp, full_name) == 0) // 比较 temp 和 full_namecout << temp << " 和 " << full_name << " 是相同的" << endl;elsecout << 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.rhkb.cn/news/159796.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态大模型升级:LLaVA→LLaVA-1.5,MiniGPT4→MiniGPT5

Overview LLaVA-1.5总览摘要1.引言2.背景3.LLaVA的改进4.讨论附录 LLaVA-1.5 总览 题目: Improved Baselines with Visual Instruction Tuning 机构&#xff1a;威斯康星大学麦迪逊分校&#xff0c;微软 论文: https://arxiv.org/pdf/2310.03744.pdf 代码: https://llava-vl.…

10.2手动推导linux中file, cdev, inode之间的关系

是时候可以手动推导一下linux里面基类父类和子类的关系了 代码放最后把 简单说明版 详细流程 第一步注册驱动 cdev结构体能看做是一个基类,那么链表里面都是字符设备驱动的cdev连载一起,啥串口,lcd的,通过cdev->list_head连接 那cdev结构体里有主次设备号 第一步 使用r…

探索未来:硬件架构之路

文章目录 &#x1f31f; 硬件架构&#x1f34a; 基本概念&#x1f34a; 设计原则&#x1f34a; 应用场景&#x1f34a; 结论 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

矿区井下智慧用电安全监测解决方案

一、背景 矿区井下作业具有复杂的环境和较高的危险性&#xff0c;对于用电安全的要求尤为严格。传统的管理模式和监测方法往往无法实时、准确地掌握井下用电情况&#xff0c;对安全隐患的排查与预防存在一定局限性。因此&#xff0c;引入智慧用电安全监测解决方案&#xff…

【LeetCode刷题(数组and排序)】:存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;nums [1,2…

【ARM Coresight 系列文章 9.1 -- ITM 仪器化跟踪宏单元详细介绍】

文章目录 1.1 ITM 介绍1.1.1 ITM 功能介绍1.1.2 Cortex-M ITM 的地址范围1.2 ITM 使用1.2.1 ITM 寄存器介绍1.2.2 Cortex-M7 ITM 代码示例1.2.3 Cortex-M33 ITM 代码示例1.1 ITM 介绍 在debug 调试阶段通常都是使用 printf(printk) 来进行进行 log 输出,然后定位问题。那么如…

TikTok国际版 使用特网科技Bluestacks模拟器安装方法

特网科技Bluestacks模拟器主机 桌面自带Bluestacks模拟器 TikTok国际版Bluestacks模拟器搜索tiktot 登录google应用商店-安装TikTok 安装过程可能需要3-5分钟不等-配置过低可能会导致安装失败&#xff0c;建议升级更高内存。 安装完成-打开 安装成功APP-我的游戏查看 打开国际版…

普通螺纹基本牙型尺寸及拧紧力矩.exe

一、概要 本软件功能主要是通过输入螺纹原始三角形高度P,螺栓规格(公称直径)d,材料的屈服应力σs,计算出公称应力截面积As、外螺纹小径d1、外螺纹小径d2、拧紧力矩T等参数。 开发本软件的原因主要有以下几点: 提高设计效率:通过这款软件,工程师可以快速计算螺纹的基本牙…

【Java学习之道】网络编程的基本概念

引言 这一章我们将一同进入网络编程的世界。在开始学习网络编程之前&#xff0c;我们需要先了解一些基本概念。那么&#xff0c;我们就从“什么是网络编程”这个问题开始吧。 一、网络编程的基本概念 1.1 什么是网络编程 网络编程&#xff0c;顾名思义&#xff0c;就是利用…

05_51单片机led流水线的实现

1:step创建一个新的项目并将程序烧录进入51单片机 以下是51单片机流水线代码的具体实现 #include <REGX52.H>void Delay500ms() //11.0592MHz {unsigned char i, j, k;i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }void main(){while(1){P1 0…

智慧水利:山海鲸数字孪生的革新之路

一、概念 什么是港口&#xff1f; "港口"通常指的是一个水域或岸边的设施&#xff0c;用于装载、卸载、储存和处理货物、以及提供与海上、河流或湖泊交通相关的服务。港口可以包括各种类型的码头、码头设备、仓库、货物运输设施、以及各种管理和物流设施。 什么是数…

LinkedHashMap与LRU缓存

序、慢慢来才是最快的方法。 背景 LinkedHashMap 是继承于 HashMap 实现的哈希链表&#xff0c;它同时具备双向链表和散列表的特点。事实上&#xff0c;LinkedHashMap 继承了 HashMap 的主要功能&#xff0c;并通过 HashMap 预留的 Hook 点维护双向链表的逻辑。 1.缓存淘汰算法…

车辆车型识别系统python+TensorFlow+Django网页界面+算法模型

一、介绍 车辆车型识别系统。本系统使用Python作为主要开发编程语言&#xff0c;通过TensorFlow搭建算法模型网络对收集到的多种车辆车型图片数据集进行训练&#xff0c;最后得到一个识别精度较高的模型文件。并基于该模型搭建Django框架的WEB网页端可视化操作界面。实现用户上…

【Unity基础】6.动画状态机

【Unity基础】6.动画状态机 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;Animator Controller组件 &#xff08;1&#xff09;创建组件 Animator Controller组件是unity用于控制管…

机器学习-无监督算法之降维

降维&#xff1a;将训练数据中的样本从高维空间转换到低维空间&#xff0c;降维是对原始数据线性变换实现的。为什么要降维&#xff1f;高维计算难&#xff0c;泛化能力差&#xff0c;防止维数灾难优点&#xff1a;减少冗余特征&#xff0c;方便数据可视化&#xff0c;减少内存…

主动配电网故障恢复的重构与孤岛划分matlab程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 参考文档&#xff1a; A New Model for Resilient Distribution Systems by Microgrids Formation&#xff1b; 主动配电网故障恢复的重构与孤岛划分统一模型&#xff1b; 同时考虑孤岛与重构的配电网故障…

嵌入式开发学习之STM32F407串口(USART)收发数据(三)

嵌入式开发学习之STM32F407串口&#xff08;USART&#xff09;收发数据&#xff08;三&#xff09; 开发涉及工具一、选定所使用的串口二、配置串口1.配置串口的I/O2.配置串口参数属性3.配置串口中断4.串口中断在哪里处理5.串口如何发送字符串 三、封装串口配置库文件1.创建头文…

低代码技术这么香,如何把它的开发特点发挥到极致?

前言 什么是低代码技术&#xff1f; 低代码是一种可视化软件开发方法&#xff0c;通过最少的编码更快地交付应用程序。图形用户界面和拖放功能使开发过程的各个方面自动化&#xff0c;消除了对传统计算机编程方法的依赖。 文章目录 前言低代码平台怎么选&#xff1f;用友Yonbu…

2024上海国际智慧城市展览会(世亚智博会)智慧城市,数字中国

在数字化、智能化的时代背景下&#xff0c;智慧城市成为了全球瞩目的焦点。而作为智慧城市领域的重要盛会&#xff0c;2024上海国际智慧城市展览会&#xff08;简称&#xff1a;世亚智博会&#xff09;则将再次汇聚全球目光。此次展览将于2024年3月26日至28日在上海跨国采购会展…

Java项目调用Python脚本(基于idea)

前期准备 1.首先需要在本地环境中安装配置python环境 Python(含PyCharm及配置)下载安装以及简单使用(Idea) 博主本次使用python版本为py3.7.3 2.idea安装python插件 位置&#xff1a;File->Settings->Plugins->python->安装后重启即可 3.引入jython依赖 &l…