19.显式转换

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(整型变量)
  • 虽然没有明确支持 shortboolchar 等相关变量,但由于方法参数存在隐式转换,会默认转换到最接近的类型进行处理。
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 练习题

显示类型转换有几种方式?他们分别是什么,请举例说明?

  1. 括号强转
int i = (int)4.5 + 3.5;
cout << i << endl; // 7
  1. 字符串和其他类型之间的转换
  • 其他类型转字符串 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

×

喜欢就点赞,疼爱就打赏