C++IO流和类型处理(11)

news2024/11/18 21:49:59

IO流

IO流包括 标准IO流,字符串流,文件流

标准IO流

基础使用

#include <iostream> //包括istream和ostream 
cin >> ----- 标准输入 
cout<< ----- 标准输出 
clog<< ----- 带缓冲区的标准错误
cerr<< ----- 不带缓冲区的标准错误              

C++预定义的类和函数参考手册:https://zh.cppreference.com/w/cpp

成员函数

cin.get -------- 读取一个字符 
cout.put -------输出一个字符 
cin.getline ------- 读一行 
cin.ignore ------- 清空缓冲区 
cin.clear ------ 清除错误信息         

字符串流

C语言的字符串处理库函数

字符指针 ------- char *

strcpy ----- 拷贝 
strcmp ----- 比较 
strcat ----- 拼接
strstr ----- 查找子串 
strlen ----- 长度 
strtok ----- 分割  //hello,bybye,new ===>按,分割===>hello byebye new 
strchr ----- 查找字符 
.... 
sprintf ----- 往字符串输出

C++中的字符串

C++预定义了string类来表示字符串

 #include <string> using namespace std;              

构造初始化

 string str("hello");
 string str = "hello";
 str = "welcome";     

重载的运算符

+/+= ------ 拼接
<< >> ----- 输入输出
== != > >= < <= ------ 比较(ASCII码)
[] ------ 根据下标获取字符(不检查越界,不推荐使用,推荐使用检查越界的成员函数at)

#include <iostream>

using namespace std;

int main()
{
    string str1("hello ");

    string str2("worldaaaaaaaaaaaa");

   // str1 += str2;
    //cout << str1;

    cout << str1+str2 << endl;
    //判断了什么??  比较的是第一个字符aiscii码值
    cout << (str1 == str2) << endl;
    cout << (str1 >= str2) << endl;
    cout << (str1 <= str2) << endl;
    //效果一致
    cout << str1[2] << endl;
    cout << str1.at(2) << endl;
    //cout << str1.at(10) << endl; //越界会报异常

    //转换C风格的字符串
    const char* s = str1.c_str();
    cout << s << endl;
    //长度
    cout << str1.length() << endl;
    cout << str1.size() << endl;
    //容量
    cout << str1.capacity() << endl;
    str1 += str2;
    cout << str1.capacity() << endl; //放不下就扩容
    cout << str1.max_size() << endl; //可以放多大的值
    return 0;
}

成员函数

at --------- 获取指定位置的字符
c_str ------ 转换成C风格的字符串(const char *)
size/length ----- 字符串的大小/长度
capacity ----- 容量
max_size ------ 最大支持的大小
empty ----- 判空

copy(char *s,int n,int pos=0); ----- 从pos位置开始拷贝n个字符到s
insert(int pos,const char *s/string s); ------ 从pos位置插入字符串s
insert(int pos,const char *s,int n); ------ 从pos位置插入字符串s的前n个字符
swap(string &s); ------ 交换本字符串和s的内容
find(char ch,int pos=0); ------- 从pos位置开始查找ch字符
find(const char *s/string s,int pos=0); ------- 从pos位置开始查找字符串s
substr(int pos,int n=npos); --------- 获取从pos开始长度为n的子字符串

练习:

完善写的mystring类

重载实现 << + += == [] =

添加at() size() capacity()的成员函数

Cpp/C++/DAY08 at main · Yu-1120/Cpp (github.com)

(3)字符串流

image-20220721225812032

  ```shell
   #include <sstream>   
            
  istringstream ----- 数据来源于字符串(读取字符串)    
  ostringstream ----- 将数据写入字符串     //字符串流和标准IO流的关系 类似于 sprintf/sscanf和printf/scanf的关系 
  ```

文件流

C++中预定义了fstream类来访问文件,分为ifstream(输入类)和ofstream(输出类),分别支持>>和<<的操作,可以使用文件路径来构造文件流,构造会自动打开文件,使用其需要包含头文件

#include

成员函数

1.打开文件 ----- open
    open(路径,打开方式);
打开方式:
    ios::in ----- 读打开
    ios::out ---- 写打开
    ios::app ---- 追加打开
    ios::trunc --- 清空打开
    
2.关闭文件 ----- close
    无参
    
3.读写文件 ----- read/write
    read(读空间的首地址,读的长度);
    write(写空间的首地址,写的长度);
4.gcount() ------ 上次读取(read)的字节数   

文件加密

异或运算 ------- 相同为0,不同为1 ------- 异或0不变,异或1取反

任何数a异或任何数b两次的结果还是a本身

1111 1111 ^ 1100 0011 = 0011 1100
0011 1100 ^ 1100 0011 = 1111 1111

xxxx xxxx ^ 1111 0011 = yyyy xxyy
yyyy xxyy ^ 1111 0011 = xxxx xxxx

练习:

实现文件解密,测试将一个文件加密后再解密内容是否完全一样。

类型处理

获取类型信息 ------- typeid

typeinfo可以获取 对象/类型 的类型信息。

用法:

#include <typeinfo>

using namespace std;

type_info typeid(类型/对象);

type_info支持的操作:
    ==/!= ------ 判断type_info的两个类型是否相同,相同就是同类型
    name() ----- 获取类型的名称(类类型包括名字的长度)
2.类型转换

类型转换

C++不再推荐使用强转,而提供了四种转换方式代替强转

dynamic_cast<类型>

用于具有多态性的父子对象之间的转换


A a是B b的父类对象,且具有多态性的父子关系
    A *pa = new B;
    B *pb = dynamic_cast<B *>(pa);

const_cast<类型>

去除/添加const属性的转换

A a;
const A *pa = &a;

//去掉pa的const属性
A *pb = const_cast<A *>(pa);
//为pb添加const属性
const A *pc = const_cast<const A *>(pb);

static_cast<类型>

最接近于C语言强转的转换,不能转换完全无关的类型

reinterpret_cast<类型>

危险的转换

struct A{short a;short b;};
int value = 0x10dcf321;
A *pa = reinterpret_cast<A *>(&value);
pa->a ------ 前2个字节的数据
pa->b ------ 后2个字节的数据

作业:

1.使用文件流实现文件的拷贝,输入拷贝的原文件和目标文件

2.附加:使用string类,将用户输入的两个字符串开头相同和结尾相同的部分合并成一个新的字符串

How are you!
Hello,nice to meet you!
===>H you! 

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

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

相关文章

lazada、速卖通、煤炉、eBay 、亚马逊测评环境系统:如何掌握核心养号技巧?

作为一个准备跨足测评行业的业者&#xff0c;或是一个正在考虑将电商业务转向测评服务的卖家&#xff0c;一份详尽的养号指南绝对是你不可错过的知识宝库。 跨境电商平台无疑是巨大的数据中心&#xff0c;它们不仅检测你的设备参数和IP&#xff0c;还分析你的购物习惯&#xf…

mapbox-gl 点位编辑功能

文章目录 前言方式一&#xff1a;借助 Marker添加自定义icon添加POI图层&#xff0c;绑定对应事件基于Marker交互创建自定义Marker编辑 / 创建POI 方式二&#xff1a;采用 mapbox-gl-draw 插件总结 前言 矢量在线编辑是gis常用的编辑功能&#xff0c;兴趣点&#xff08;POI&am…

力扣算法练习(一)

目录 1. 两数相加&#xff08;2&#xff09; 2. 寻找两个正序数组的中位数&#xff08;4&#xff09; 1. 两数相加&#xff08;2&#xff09; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储…

MySQL 中的常用函数详解

0️⃣前言 MySQL是一种常用的关系型数据库管理系统&#xff0c;它提供了许多内置函数来处理数据。本文将介绍MySQL中的各种常用函数&#xff0c;包括字符串函数、日期函数、数学函数、聚合函数等。 文章目录 0️⃣前言1️⃣字符串函数1.1CONCAT函数1.2SUBSTRING函数1.3REPLACE函…

高级SQL语句1

高级SQL语句 建立实验环境高级语句1.---- SELECT ----显示表格中一个或数个字段的所有数据记录2.---- DISTINCT ----不显示重复的数据记录3.---- WHERE ----有条件查询4.---- AND OR ----且 或 &#xff08;一般配合where使用&#xff09;5.---- IN ----显示已知的值的数据记录…

私家云二代/比特米盒安装Armbian Blueseye到Emmc

快捷导航 私家云二代/比特米盒安装Armbian Blueseye到Emmc设备介绍前期准备硬件清单Windows电脑一台Type-C数据线一根U盘或SD卡一个键盘一把显示器HDMI数据线 软件清单Amlogic USB Burning ToolUSB烧录工具SSH工具 下载清单Amlogic刷机工具USB烧录工具ATV6.imgDTB文件BIN文件切…

Spring Security OAuth2授权原理、流程与源码解读

文章目录 前言AuthorizationServerConfigurerAdapter(身份认证服务配置适配器)OAuth2AuthorizationServerConfiguration(OAuth2授权服务配置) EnableAuthorizationServer(开启身份认证服务)AuthorizationServerEndpointsConfigurations身份认证服务站点配置类AuthorizationEndp…

HITSZ嵌入式计算(研)23年Keil模拟器项目解决方案

HITSZ嵌入式计算&#xff08;研&#xff09;23年Keil模拟器项目解决方案 1. 项目介绍2. Keil安装3. 创建新项目3.1 参考博文3.2 流程 4. 发送串口数据4.1 参考博文4.2 串口收发流程 5. 产生波形5.1 头文件封装5.2 初始化GPIO口5.3 产生并观察方波 6. Keil信号函数和中断6.1 中断…

佩戴舒适的蓝牙耳机有哪些品牌?不伤耳的蓝牙耳机推荐

​真无线蓝牙耳机逐渐成为大家日常必不可少的数码产品&#xff0c;也随着耳机的发展&#xff0c;人们对蓝牙耳机的要求也越来越高&#xff0c;不仅音质要好&#xff0c;长时间佩戴也要舒适&#xff0c;更是能够应用于多种场景中使用&#xff0c;但挑选蓝牙耳机也是一门学问&…

kettle开发-Day38-超好用自定义数据处理组件

目录 前言&#xff1a; 一、半斤八两&#xff0c;都不太行 1、表输入&#xff0c;速度快&#xff0c;但不稳妥 2、稳的一批&#xff0c;但是慢的像蜗牛 二、各诉衷肠&#xff0c;合作共赢 1、表输入&#xff0c;高效数据插入 2、插入更新&#xff0c;一个都不能少 三、表输…

## flink- mysql同步数据至starrocks-2.5.0之数据同步

flink- mysql同步数据至starrocks-2.5.0之数据同步 mysql 创建 表 CREATE TABLE t_user (id bigint NOT NULL AUTO_INCREMENT,user_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,age int DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB…

手机app测试杂谈

手机上的 app 分为基于 HTML5 的 app(类似于 pc 上的 b/S 应用)和本地 app(类似于 C/S 结构)。 所以测试上我们也可以充分吸收 web 的 b/s 和 c/s 测试经验。但是不同于 pc 上的应用 测试&#xff0c;手机上的测试有其独特性 测试前的思考:我们这个产品主要是做什么的?为什么我…

03. 青龙面板配置B站快速升级任务天选时刻脚本(保姆级图文)

目录 功能介绍与环境要求1. 修改配置文件拉取.sh脚本2. 拉取库脚本3. 安装 dotnet 环境4.1 扫码登录方式4.2 b站cookie方式登录&#xff08;如果你扫码成功了就不用看这个了&#xff09;获取cookie新建cookie的环境变量 5. 配置任务设置变量6. 运行每日任务测试一下总结 欢迎关…

搭建cloud项目以及各个依赖和配置说明

文章目录 背景步骤配置父pom文件spring-cloud和spring-cloud-alibaba的区别 添加网关模块配置网关的application.yml文件网关入口 普通模块普通模块的配置文件&#xff1a;普通模块的pom文件启动类&#xff1a;application.yml文件和bootstrap.yml文件的区别 总结 背景 最近在…

chatgpt赋能python:Python描述符:更加灵活的属性管理方式

Python描述符&#xff1a;更加灵活的属性管理方式 Python是一种高级编程语言&#xff0c;它的简单易用、高效性和灵活性使得它成为了现代企业和开发者的首选开发语言之一。然而&#xff0c;在使用Python编写代码时&#xff0c;很多时候需要对属性进行访问和修改&#xff0c;而…

C++单目运算符和特殊运算符的重载(9)

运算符的重载 原理和机制 C中运算符只支持基本数据类型运算&#xff0c;如果需要运算符支持类类型的运算&#xff0c;需要使用C提供的新语法 ------- 运算符的重载 运算符的重载本质上是通过函数来实现的&#xff0c;将类类型数据的运算过程写成一个特殊的函数&#xff0c;当…

YOLOv8 图像分割

一、背景 二、环境配置 官网&#xff1a;Previous PyTorch Versions | PyTorch cuda 11.7 pytorch 1.13.0 torchvision 0.14.0 pytorch-cuda 11.7 三、安装yolov8 官网&#xff1a;GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX &…

Mendix 10 树形组件分析及应用

一、前言 产品研发目标是服务于业务&#xff0c;解决具体业务问题&#xff0c;带来业务价值。 因此&#xff0c;任何产品功能的推出&#xff0c;都应该秉承“从实践中来&#xff0c;到实践中去”的原则&#xff0c;在实战中发现问题&#xff0c;通过新功能设计和功能改进解决…

chatgpt科普

引言 chatgpt没有国内开放&#xff0c;为什么如此重要。抛开技术细节&#xff0c;少用专业名词&#xff0c;在整体功能上讲解 ChatGPT 的工作原理、制造过程、涌现的能力、未来的影响以及如何应对。让大家明白&#xff1a; ChatGPT是如何回答问题的。 它是怎么被制造的&…

Go语言实现单链表

博主最近在学习Go语言&#xff0c;所以打算更新一期Go语言版本的数据结构。这篇文章将的是Go语言如何实现单链表。 文章目录 前言一、个人见解&#xff0c;为什么学GO&#xff1f;二、Go语言实现单链表1.创建节点2.通过数组创建一个单链表3.遍历单链表4.单链表插入操作4.1 伪代…