8、输入、输出和文件

1、ifstream 用于从文件中读取数据。它提供了读取文件内容的方法。用法:

#include<ifstream>

ifstream ifs;

ifs.open("文件路径")

if(ifs.is_open()){

        int x =0;

        while(ifs>>x){

                vec.push_back(x);

        }

        ifs.close();

}

ofstream 用于在文件中写数据。它提供了写文件的方法。用法:

#include<ofstream>

ofstream ofs;

ofs.open("文件路径")

if(ofs.is_open()){

        int x = 0;

        while(x<100){

                x++;

                ofs<<x;

        }

        ofs.close();

或者:

         int numbers[] = {1, 2, 3, 4, 5};
        ofs.write(reinterpret_cast<const char*>(numbers), sizeof(numbers));

}

istream 用于从标准输入设备(比如键盘)或其他输入流中读取数据。它提供了从标准输入或其他输入流中获取数据的方法,适用于通用的输入操作。

在C++的 ios_base 类中,有一组文件流相关的常量模式(mode flags),它们用于指定文件打开时的读写模式。这些常量模式通常用于 fstream 类(如 ifstreamofstream 和 fstream)的构造函数或 open() 成员函数中。以下是一些常用的文件常量模式:

  1. ios_base::in:以只读方式打开文件,用于输入流。ifstream默认
  2. ios_base::out:打开文件以便写入,会覆盖原有内容,用于输出流。ofstream默认
  3. ios_base::app:打开文件以便追加写入,每次写入都会添加到文件末尾,用于输出流。
  4. ios_base::ate:打开文件并立即将文件指针移到文件末尾,用于输入或输出流。
  5. ios_base::trunc:打开文件并截断文件到零长度,用于输出流。
  6. ios_base::binary:以二进制模式打开文件,而不是以文本模式打开。

2、getline读取一行字符,直到遇到\n为止。

用法:

ifstream ifs;

ifs.open("文件路径")

getline(ifs,str1);

3、<sstream>库定义了istringstream、ostringstream,分别用来进行流的输入和输出操作。

  1. istringstream

    • 用途:用于从字符串中读取数据,即将字符串解析为各种数据类型。将string输入到istringsteam中,然后可以从中提取需要的数据。
    • 举例
      #include <iostream>
      #include <sstream>
      #include <string>
      
      int main() {
          std::string input = "123 456 789";
          std::istringstream iss(input);
      
          int num1, num2, num3;
          iss >> num1 >> num2 >> num3;
      
          std::cout << "Numbers are: " << num1 << ", " << num2 << ", " << num3 << std::endl;
          return 0;
      }
      
    • 说明:在这个例子中,istringstream从字符串input中提取整数,并将其存储在变量num1num2num3中。
  2.  ostringstream

    • 用途:用于将数据格式化为字符串,即将各种数据类型转换为字符串。将各种类型数据输入到ostringstream中,输出string。需要通过os.str()将ostringstream类型转化为string类型。
    • 举例
      #include <iostream>
      #include <sstream>
      #include <string>
      
      int main() {
          std::ostringstream oss;
      
          int num1 = 123;
          double num2 = 45.67;
      
          oss << "Numbers are: " << num1 << " and " << num2;
      
          std::string output = oss.str();
          std::cout << "Output string: " << output << std::endl;
          return 0;
      }
      
    • 说明:在这个例子中,ostringstream用于构建一个包含整数num1和浮点数num2的字符串。

从一个文件中读以空格和换行符分隔的数据流程:

ifstream ifs(文件路径);

if(ifs.is_open())

{

        string str1;

        getline(ifs, str1);

        istringstream iss(str1);

        uint32 data;

        while(iss>>data)

        {

                data_v.push_back(data);

        }

}

4、cout的作用是识别变量,并将变量的实际值转成字符串后输出到终端。cout可以通过dec(十进制)/hex(十六进制)和oct(八进制)来控制输出数据格式。cout是一个关联控制台的对象。<<是ostream库中的重载运算符号,通过cout对象调用,该符号将数据插入到输出到缓存区的流中。endl可以不用等到缓存区满就可以刷新缓存区,从而输出到终端。

5、cout.width(n)输出n个字符,不足则前面补空格。如果前面有cout.fill(*)则在前面补*,而不是空格。可以通过cout.setf(ios_base::功能成员函数)实现cout数据格式的修改,比如showpoint:显示末位小数;show_base:加前缀(0x等);boolalpha:输出true或者false;left:左对齐;right:右对齐,等。

常见的 ios_base 标准控制符及其作用:

  1. boolalpha:控制 bool 类型的输出格式。设置后,true 和 false 会分别以字符串 “true” 和 “false” 输出,而不是数值 1 和 0。

  2. noboolalpha:取消 boolalpha 的设置,使 bool 类型的输出恢复为数值输出(1 和 0)。

  3. showbase:在输出整数时,显示数值的进制前缀(例如,0x 表示十六进制,0 表示八进制)。

  4. noshowbase:取消 showbase 的设置,使输出整数时不显示进制前缀。

  5. showpoint:在浮点数输出中始终显示小数点,即使小数部分为零。

  6. noshowpoint:取消 showpoint 的设置,使浮点数输出时不显示不必要的小数点。

  7. showpos:在非负数前显示正号 +

  8. noshowpos:取消 showpos 的设置,使输出中不显示正号 +

  9. uppercase:将字母输出为大写形式。

  10. nouppercase:取消 uppercase 的设置,将字母输出为小写形式(默认)。

6、cin 是 std::istream 类型的对象,cin通过cin>>x,把输入的信息转化为计算机可以接受的变量。cin使用空格、制表符和换行符来确定字符串的结束位置。cin输入数据类型和预期不一致时会产生异常,需要调用cin.clear()清除异常。

cin.get(a,size)可以获取指定长度size-1个字符。cin读到空格结束。

get获取固定长度字符串,‘\n’不会导致获取字符串结束。

read(buf,size):从输入流中读取size长度的数据。

peek()返回下一个字符。

putback将一个字符写入的输入流中。

7、    std::string homeDir = std::getenv("HOME");

std::ifstream fin(homeDir + "/dp02_sim/filter.config");

//读用户目录下的配置文件

8、LogMessage& operator<<(const T& data) {

          if (parser.dump_type & 1) log_stream_ << data;

          if (parser.dump_type & 2) of_stream_ << data;

  }

重载<<运算符,将data输入到log_stream_或者of_stream_中。

9、通过<<"\x1b[32m"可以实现字符串不同颜色的打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值