19.类型转换-显式转换
19.1 知识点
显示转换是什么
上节课学习的隐式转换是编译器自动帮助我们进行的类型转换。
显示转换是手动处理的类型转换,也称为强制转换。
括号强转
- 目的:将高精度的类型强制转换为低精度。
- 语法:
变量类型 变量名 = (变量类型)变量
或(变量类型)(表达式)
。 - 注意:精度问题、范围问题。
- 作用:括号强转最大的作用是,我们可以在计算过程中强制改变隐式转换规则。
int i = (int)4.5;
cout << i << endl; // 4
i = (int)(3 + 1 + 2.5);
cout << i << endl; // 6
float f = 4.5f;
i = (int)f;
cout << i << endl; // 4
i = 2 / 1.1 + 3 / 1.1;
cout << i << endl; // 4
i = (int)(2 / 1.1) + 3 / 1.1;
cout << i << endl; // 3
i = 4.5 + 3.5;
cout << i << endl; // 8
i = (int)4.5 + 3.5;
cout << i << endl; // 7
其他类型转字符串 to_string 方法
- 需要引用一个新的头文件:
#include <string>
。 - 使用时需要引用
std
命名空间。 - 提供了一个系统写好的方法:
to_string(整型变量)
。 - 虽然没有明确支持
short
、bool
、char
等相关变量,但由于方法参数存在隐式转换,会默认转换到最接近的类型进行处理。
int i2 = 10;
string str = to_string(i2);
cout << str << endl; // 10
bool b = true;
str = to_string(b);
cout << str << endl; // 1
char c = 'A';
// 这里打印的会是A对应的ASCII码,因为是隐式转换为了整型,所以不是打印字符
str = to_string(c);
cout << str << endl; // 65
字符串转其他类型 stoxx 方法
- 需要引用一个新的头文件:
#include <string>
。 - 使用时需要引用
std
命名空间。 - 提供了系统写好的方法:
cout << "请输入一个数字" << endl;
cin >> str; // 假设是666
// 字符串转 int ——> stoi(字符串)
int i3 = stoi(str);
//short s2 = stoi(str);//short也是可以的 注意范围即可
cout << i3 << endl; // 666
// 字符串转 long ——> stol(字符串)
str = "888";
long l = stol(str);
cout << l << endl; // 888
// 字符串转 long long ——> stoll(字符串)
long long ll = stoll("8995");
cout << ll << endl; // 8995
// 字符串转 unsigned long ——> stoul(字符串)
unsigned long ul = stoul("89958");
cout << ul << endl; // 89958
// 字符串转 unsigned long long ——> stoull(字符串)
unsigned long long ull = stoull("586");
cout << ull << endl; // 586
在调用
sto
相关方法时,传入的内容一定要合法(必须是数字,并且在对应方法的类型存储范围内)。注意:
- 转换失败会报错,失败的主要原因是溢出和类型不匹配。
- 溢出:如果输入的数字超出了对应类型的存储范围,会直接报错。
- 类型不匹配:如果输入的不是数字,是中文、英文、符号等,也会直接报错。
19.2 知识点代码
Lesson19_类型转换_显示转换.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
std::cout << "显示转换\n";
#pragma region 知识点一 显示转换是什么
//上节课学习的隐式转换是编译器自动帮助我们进行的类型转换
//显示转换 ——> 手动处理 强制转换
#pragma endregion
#pragma region 知识点二 括号强转
// 目的: 将高精度的类型强制转换为低精度
// 语法: 变量类型 变量名 = (变量类型)变量 或 (变量类型)(表达式);
// 注意: 精度问题 范围问题
// 作用: 括号强转最大的作用是,我们可以在计算过程中强制改变隐式转换规则
int i = (int)4.5;
cout << i << endl; // 4
i = (int)(3 + 1 + 2.5);
cout << i << endl; // 6
float f = 4.5f;
i = (int)f;
cout << i << endl; // 4
// 1.81... + 2.72.... = 4.....
i = 2 / 1.1 + 3 / 1.1;
cout << i << endl; // 4
// 1 + 2.72.... = 3.72.....
i = (int)(2 / 1.1) + 3 / 1.1;
cout << i << endl; // 3
i = 4.5 + 3.5;
cout << i << endl; // 8
i = (int)4.5 + 3.5;
cout << i << endl; // 7
#pragma endregion
#pragma region 知识点三 其他类型转字符串 to_string 方法
// 需要引用一个新的头文件(系统写好的内容)
// #include <string>
// 使用时需要引用std命名空间
// 提供了一个系统写好的方法:to_string(整型变量)
// 虽然没有明确支持 short bool char 相关变量
// 但是由于方法参数也存在隐式转换 会默认转换到最接近的类型进行转换处理
int i2 = 10;
string str = to_string(i2);
cout << str << endl;//10
//虽然没有明确支持 short bool char 相关变量
//但是由于方法参数也存在隐式转换 会默认转换到最接近的类型进行转换处理
bool b = true;
str = to_string(b);
cout << str << endl;//1
char c = 'A';
//这里打印的会是A对应的ASKII码 因为是隐式转换为了整型 所以不是打印字符
str = to_string(c);
cout << str << endl;//65
#pragma endregion
#pragma region 知识点四 字符串转其他类型 stoxx 方法
// 需要引用一个新的头文件(系统写好的内容)
// #include <string>
// 使用时需要引用std命名空间
// 提供了系统写好的方法:
cout << "请输入一个数字" << endl;
cin >> str;//假设是666
// 1.字符串转int ——> stoi(字符串)
int i3 = stoi(str);
//short s2 = stoi(str);//short也是可以的 注意范围即可
cout << i3 << endl;//666
// 2.字符串转long ——> stol(字符串)
str = "888";
long l = stol(str);
cout << l << endl;//888
// 3.字符串转long long ——> stoll(字符串)
long long ll = stoll("8995");
cout << ll << endl;//8995
// 4.字符串转unsigned long ——> stoul(字符串)
unsigned long ul = stoul("89958");
cout << ul << endl;//89958
// 5.字符串转unsigned long long ——> stoull(字符串)
unsigned long long ull = stoull("586");
cout << ull << endl;//586
// 注意:
// 转换失败会报错
// 失败主要原因:溢出 和 类型不匹配
// 溢出:如果你输入的数字 超过了对应的类型的存储范围 会直接报错
// 类型不匹配:如果你输入的不是数字,是中文、英文、符号等等 也会直接报错
// 在调用sto相关方法时,传入的内容一定要合法(一定要是数字 并且一定要在对应方法的类型的存储范围内)
#pragma endregion
}
19.3 练习题
显示类型转换有几种方式?他们分别是什么,请举例说明?
- 括号强转
int i = (int)4.5 + 3.5;
cout << i << endl; // 7
- 字符串和其他类型之间的转换
- 其他类型转字符串
to_string
string str = to_string(i);
cout << str << endl; // 7
- 字符串转其他类型
stoi
相关方法
i = stoi(str);
cout << i << endl; // 7
请将24069转成字符串,并打印
i = 24069;
str = to_string(i);
cout << str << endl; // 24069
提示用户输入姓名、语文、数学、英语成绩(以字符串的形式输入),将输入的3门成绩计算总分和平均分并打印出来
string str2;
cout << "请输入你的姓名" << endl;
cin >> str2;
cout << "请输入你的语文成绩" << endl;
cin >> str2;
// 将字符串转为语文成绩 用数值变量存储
int yuwen = stoi(str2);
cout << "请输入你的数学成绩" << endl;
cin >> str2;
int shuxue = stoi(str2);
cout << "请输入你的英语成绩" << endl;
cin >> str2;
int yingyu = stoi(str2);
// 总分
int sum = yuwen + shuxue + yingyu;
// 平均分
float avg = sum / 3.0f;
cout << "总分:" << sum << ", 平均分:" << avg << endl;
19.4 练习题代码
Lesson19_练习题.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
std::cout << "显示转换 练习题\n";
#pragma region 练习题一
//显示类型转换有几种方式?他们分别是什么,请举例说明?
//1.括号强转
int i = (int)4.5 + 3.5;
cout << i << endl;//7
//2.字符串和其他类型之间的转换
// 其他类型转字符串 to_string
string str = to_string(i);
cout << str << endl;//7
// 字符串转其他类型 stoxx 相关方法
i = stoi(str);
cout << i << endl;//7
#pragma endregion
#pragma region 练习题二
//请将24069转成字符串,并打印
i = 24069;
str = to_string(i);
cout << str << endl;//24069
#pragma endregion
#pragma region 练习题三
// 提示用户输入姓名、语文、数学、英语成绩(以字符串的形式输入),
// 将输入的3门成绩计算总分和平均分并打印出来
string str2;
cout << "请输入你的姓名" << endl;
cin >> str2;
cout << "请输入你的语文成绩" << endl;
cin >> str2;
//将字符串转为语文成绩 用数值变量存储
int yuwen = stoi(str2);
cout << "请输入你的数学成绩" << endl;
cin >> str2;
int shuxue = stoi(str2);
cout << "请输入你的英语成绩" << endl;
cin >> str2;
int yingyu = stoi(str2);
//总分
int sum = yuwen + shuxue + yingyu;
//平均分
float avg = sum / 3.0f;
cout << "总分:" << sum << ",平均分:" << avg << endl;
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com