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

这篇具有很好参考价值的文章主要介绍了C++IO流和类型处理(13)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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)字符串流

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

  ```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类,将用户输入的两个字符串开头相同和结尾相同的部分合并成一个新的字符串文章来源地址https://www.toymoban.com/news/detail-506079.html

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

到了这里,关于C++IO流和类型处理(13)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java文件字符流和字节流中的实战

    文件的分类上一篇文章(文件对象处理)已经和大家讲解过了。本章主要文件主要针对于对文件内容的操作展开讲解,文件分为: 文本文件 和 二进制文件 ,不同的文件,操作方法也不尽相同。 针对文本文件,Java提供了一组类——”字符流“,代表类(Reader,Writer)。同样

    2023年04月22日
    浏览(33)
  • Python标准数据类型-String(字符串)

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 📃个人主页:hacker707的csdn博客 🔥系列专栏:零基础入门篇 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生

    2024年02月03日
    浏览(50)
  • Python标准数据类型-字符串常用方法(下)

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 📃个人主页:hacker707的csdn博客 🔥系列专栏:零基础入门篇 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生

    2024年02月04日
    浏览(62)
  • Python标准数据类型-字符串常用方法(上)【文末送书】

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 📃个人主页:hacker707的csdn博客 🔥系列专栏:零基础入门篇 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生

    2024年02月03日
    浏览(79)
  • Python标准数据类型-字符串常用方法(下)【文末送书】

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 📃个人主页:hacker707的csdn博客 🔥系列专栏:零基础入门篇 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生

    2024年02月11日
    浏览(52)
  • Rust 标准库字符串类型String及其46种常用方法

    Rust主要有两种类型的字符串:str和String str 由[u8]表示,UTF-8编码的字符串的引用,字符串字面值,也称作字符串切片。&str用于查看字符串中的数据。它的大小是固定的,即它不能调整大小。 String String 类型来自标准库,它是可修改、可变长度、可拥有所有权的同样使用UTF

    2024年02月07日
    浏览(98)
  • 【Golang】IEEE754标准二进制字符串转为浮点类型

      IEEE 754是一种标准,用于表示和执行浮点数运算的方法。在这个标准中,单精度浮点数使用32位二进制表示,分为三个部分:符号位、指数位和尾数位。 符号位(s) 用一个位来表示数的正负,0表示正数,1表示负数。 指数位(e) 用8位表示指数。对于单精度浮点数,指数位是以

    2024年01月21日
    浏览(49)
  • 10 | Tensorflow io流和 tfrecord读取操作

    tf.io 模块是 TensorFlow 中用于处理输入输出(I/O)操作的工具模块,提供了许多常见的函数,用于读写文件、处理图像、序列化和反序列化数据等。以下是一些常见的 tf.io 模块中的函数: 文件操作 : tf.io.read_file(file) :读取文件内容。 tf.io.write_file(file, contents) :将内容写入文

    2024年01月20日
    浏览(32)
  • Linux标准IO对文件的基本操作(一)

    在Linux标准IO中,就是用 库函数 对文件进行操作。在C语言中有许多库函数方便用户去对文件进行操作。下面谈谈一些简单基本的函数,这些函数都是被包含在头文件 stdio.h 中的。 要操作一个文件,我们肯定先 打开 它,这里打开并不是去右键文件然后左键打开。这里的打开是

    2024年02月15日
    浏览(44)
  • MFC 文件读写包括字符串的结构体

    试过CString char* 写入的都是地址 它不起作用的原因是fwrite向文件写入了一个连续的字节块,然而你的结构体包含指向其他地方的指针,所以你存储的基本上是字符串的地址,而不是字符串本身。 如果你想使用fwrite,你需要让结构体成为一个连续的字节块,也就是说,在你的结

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包