C++ STL与文件处理操作总结

2023-05-16

STL 标准库,英文为Standard Template Library。广义上讲分为三类,algorithm(算法)、container(容器)、iterator(迭代器)。

打开文件的方式有:

FILE *fp = fopen(filename,"w");
if(!fp)
    cout<<("open file error!!!");

读取文件的操作有:

string s;
ifstream file(filename);//#include<fstream>
	if(file.is_open())
    {
	    while(getline(file,s))
	    {
		    vector1.push_back(s);
	    }
    }

这里使用了ifstream,是一种文件的输入流,其中包括了很多文件模块,比较方便。 getline 可以从文件中获取到整行的字符串,包括空格,而cin则不能得到空格。

fp = fopen(filename, "r");
	if(!fp)
	{
		cout<<"open file error!!"<<endl;
	}

	while((ch = fgetc(fp))!=EOF){
		
		if(ch!='.'&&ch!=','&&ch!=':'&&ch!=';'&&ch!=' ')
		{
			if(ch<='Z'&&ch>='A')
				ch += 32; 
			s[i]=ch;
			i++;
		}
		else if(s[0]!='\0')
		{
			words.push_back(s);
			while(i){
				s[i--] = '\0';
			}
			s[0] = '\0';
		}
	}
	fclose(fp);

这段代码是读入一段文本,通过标点符号来提取出不同的单词,并将这些单词储存在一个vector中。

写入文件的操作有:

while(gets(a)&&strcmp(a,"")!=0)//a为字符串
	{
		fprintf(fp,"%s",a);
		fputc('\n',fp);
	}
fclose(fp);

这里是将输入的字符串写入到文件中,不同的字符串用回车隔开,当输入为空时,跳出while循环。

    ofstream fout;
	fout.open(filename,ios_base::out);
	if(fout.is_open())
	{
		for(vector<string>::iterator i=vector1.begin(); i!=vector1.end(); ++i)
		{
			fout<<(*i);
			fout<<('\n');
		}
	}
	fout.close();

这里使用了ofstream,是一种用于文件的输出流。这段代码依次将vecoter1中的字符串写入文件中,每个字符串为一行。

sort(vector1.begin(),vector1.end());

sort是一个可以自动排序的函数,非常好用。

vector<vector<string> > words(2);
lie = words[0].size();

通过这种方式可以建立一个二维的vector,代码中的参数2表示这个二维vector有两行。.size()函数可以知道这一行中有多少个元素。

另外再加两个常用的函数:

c_str()和atoi,c_str 可以将string类型转换成char*类型,转换以后就可以对字符串执行strcmp,strcpy等函数操作了。

atoi可以将字符串转换成整型,很是适合数字储存成字符串类型的情况,itoa函数正好相反,它可以将整型值转换为字符串,二者搭配使用可以在储存过程中简化过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ STL与文件处理操作总结 的相关文章

  • 在带有或不带有命名空间的 中使用类型

    在 C 11 中 我可以选择是否要使用带或不带命名空间 std 中定义的类型 至少我的编译器 g 4 7 接受这两种变体 我的问题是 使用 cstdint 中的 typedef 的推荐方法是什么 有或没有命名空间 有什么优点或缺点 或者这只
  • 多线程程序中的 std::string

    鉴于 1 C 03标准没有以任何方式解决线程的存在 2 C 03 标准将其留给实现来决定是否std string应该在其复制构造函数中使用 Copy on Write 语义 3 写时复制语义通常会导致多线程程序中不可预测的行为 我得出以下看
  • STL:为向量编写“where”运算符

    我需要根据几个布尔谓词找到向量中的索引 ex vector
  • end()在STL容器中是如何实现的?

    因此 当我们需要从头到尾遍历容器时 我们会写类似的内容 for i v gt begin i v gt end i 假设i是容器的迭代器v 我的问题是 什么保证 end 将始终指向容器中最后一个元素之后的一个 STL 如何确保这种行为 这种
  • 重写标准库使用的内存分配方法? [复制]

    这个问题在这里已经有答案了 是否可以覆盖 STL 分配 管理和释放内存的方式 如果可能的话 人们会怎样做呢 有没有一种方法可以将处理原始内存的代码保留在一个类或文件中 我想对我的整个程序执行此操作 以便我可以跟踪内存使用情况 时间和生命周期
  • C++ 中有标准的日期/时间类吗?

    C stl 有标准时间类吗 或者我是否必须在写入流之前转换为 c 字符串 例如 我想将当前日期 时间输出到字符串流 time t tm ostringstream sout sout lt lt tm lt lt ends 在本例中 我将当
  • 区分映射和集合的模板

    在创建代码时common for set unordered set map and unordered map 我需要几种方法 其中处理实际上是不同的 我的问题是让编译器推断出要使用哪个实现 考虑这个例子 include
  • 用于列表和映射的 C++ 容器

    我们有一个键和值对的集合 我们需要一个容器 它可以帮助我们检索值 o 1 但也可以记住插入顺序 以便当我们进行迭代时 我们可以像插入顺序一样进行迭代 由于键是一个字符串 我们将无法使用集合或类似的结构 目前我们已经定义了自己的集合类 其中包
  • 使用 istream_iterator 范围构造时无法访问向量

    我尝试编译此代码片段 但出现编译器错误 使用 Visual Studio 2010 进行编译 include
  • 从 std::list 中删除具有特定值的元素

    我需要从 std list 中删除具有特定值的元素 随着list
  • “向量迭代器+偏移量超出范围”断言有用吗?

    这个完美的程序在 Visual Studio 2013 的调试模式下失败了 include
  • 二维向量的迭代器

    如何为 2d 向量 向量的向量 创建迭代器 虽然你的问题是not非常清楚 我假设您的意思是 2D 向量表示向量的向量 vector lt vector
  • 如何找到向量中第一个小于整数 X 的元素? (c++)

    如果我有以下向量 10 10 10 20 20 20 30 30 我想要一个函数返回 X 的整数的位置或直接返回 X 之后的较小元素 例如如果我正在搜索 11 我希望函数返回 2 因为第二个元素 10 是第一个较小的元素向量中大于 11 的
  • 如何避免在 std::pair 中“隐式”调用单参数构造函数

    最初的问题是如何与std map
  • 为什么这个 C++ STL 分配器不分配?

    我正在尝试编写一个派生自的自定义 STL 分配器std allocator 但不知何故所有的电话allocate 去基础班 我已将范围缩小到以下代码 template
  • const_iterator 和 iterator 有什么区别? [复制]

    这个问题在这里已经有答案了 这两者在 STL 内部的实现方面有什么区别 性能方面有什么区别 我想当我们以 只读方式 遍历向量时 我们更喜欢const iterator right 谢谢 没有性能差异 A const iterator是一个指
  • STL(标准模板库)中使用的设计模式

    我正在学习STL和设计模式 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据 我希望你的意思是 哪些设计模式可以在STL中识别 STL 堆栈是一个容器适配器 适配器是一种设计模式 迭代器也是一
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • 带有自定义分配器的 std::string

    所以我目前正在编写一个内存调试器 为此我需要 stl 容器对象来使用未跟踪的分配器 我的整个代码库中都散布了 std string 因此我将其键入以使用未跟踪的分配器 typedef std basic string
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function

随机推荐

  • 字符串大小的比较

    字符串大小比较的步骤 xff1a 从左至右一位一位比较 xff0c 如果相同 xff0c 则继续下一位 xff0c 如果不同 xff0c 则谁的ASCII大谁的字符串就大如果比较到其中一者已经结束了 xff0c 还没有分出大小 xff0c
  • STM32延时函数的四种方法

    目录 1 普通延时 2 定时器中断 3 查询定时器 4 汇编指令 单片机编程过程中经常用到延时函数 xff0c 最常用的莫过于微秒级延时delay us 和毫秒级delay ms 本文基于STM32F207介绍4种不同方式实现的延时函数 1
  • STM32的FSMC外设简介

    目录 01 FSMC特点 02 AHB接口 03 外部设备地址映射 04 NOR PSRAM控制器 05 外部存储器接口信号 06 NOR PSRAM控制器异步事务 07 模式1 08 模式A 09 代码说明 01 FSMC特点 Flexi
  • STM32使用DMA接收串口数据

    目录 01 概述 02 DMA接收 03 中断 04 代码 01 概述 在之前的文章里 STM32串口详解 和 STM32 DMA详解 文章中 xff0c 详细讲解了STM32的串口和DMA外设 xff0c 本篇文章将不在细述串口和DMA的
  • 指针与数组

    1 定义 指针 xff1a C语言中某种数据类型的数据存储的内存地址 xff0c 例如 xff1a 指向各种整型的指针或者指向某个结构体的指针 数组 xff1a 若干个相同C语言数据类型的元素在连续内存中储存的一种形态 数组在编译时就已经被
  • 关于软件定时器的一些讨论

    1 简介 这里先介绍下软件定时器和硬件定时器的区别 硬件定时器 xff1a CPU内部自带的定时器模块 xff0c 通过初始化 配置可以实现定时 xff0c 定时时间到以后就会执行相应的定时器中断处理函数 硬件定时器一般都带有其它功能 xf
  • 表驱动法在STM32中的应用

    1 概念 所谓表驱动法 Table Driven Approach 简而言之就是用查表的方法获取数据 此处的 表 通常为数组 xff0c 但可视为数据库的一种体现 根据字典中的部首检字表查找读音未知的汉字就是典型的表驱动法 xff0c 即以
  • 关于共享资源保护的思考

    1 引言 先聊聊分享这篇文章的原因 xff0c 在使用STM32时 xff0c 我发现对于GPIO输出操作 xff0c 可以使用GPIOx ODR寄存器 xff0c 也可以使用GPIOx BSRR寄存器 对应的标准外设库API接口有 voi
  • 预编译#error的使用

    1 引言 说到预编译 xff0c 大家立刻就能想到 define if ifdef和 ifndef等熟悉的预编译命令 其实 include xff0c 我们通常放在源文件用来包含头文件 xff0c 它也是预编译命令 当然这不是这篇文章的重点
  • STM32 IIC详解

    目录 1 IIC定义 2 IIC协议规范 2 1 SDA和SCL信号 2 2 数据有效性 2 3 开始和结束信号 2 4 字节格式 2 5 从机地址和读写位 3 计算IIC的频率 4 PCF8536 4 1 Acknowledge 4 2
  • STM32 SPI详解

    目录 1 SPI简介 2 SPI特点 2 1 SPI控制方式 2 2 SPI传输方式 2 3 SPI数据交换 2 4 SPI传输模式 3 工作机制 3 1 相关缩写 3 2 CPOL极性 3 3 CPHA相位 3 4 极性和相位图示 3 5
  • STM32移植LWIP

    目录 01 IAR工程移植 02 修改Keil工程 在上篇文章 LWIP初体验 修改ST官方demo 中我们已经在自己的开发板上实现了简单的TCPsever和TCPclient功能 验证完了硬件 xff0c 接下来的工作就是优化代码 xff
  • 树莓派4B交叉编译工具链安装

    目录 一 安装配置环境介绍 xff1a 1 宿主机环境 xff1a 2 树莓派系统 xff1a 二 获取交叉编译工具链 xff1a 1 从GitHub下载 不推荐 xff1a 1 xff09 下载必要的软件和工具 xff1a 2 xff09
  • 一种复用模块原理图的设计方法(Port)

    在看一个参考设计时 xff0c 发现一种通过使用port来进行Pin Map 从而让子模块图保持干净 xff0c 以便重复利用的方法 子模块图如下 xff1a 在该图左边 xff0c 通过Port符号 xff0c 将芯片所有的信号管脚 xf
  • SourceTree 设置内置对比视图 不diff大文件

    有时候会往仓库里添加pdf rar等格式的大文件 xff0c 本来diff也看不出个差别来 xff0c 但在sourceTree里面添加时 xff0c 软件会自动去做diff xff0c 如果这类文档很大 xff0c 就会导致soucetr
  • win10 docker desktop运行故障自诊断

    在docker desktop运行出错时 xff0c 程序里有一个诊断工具用于本地诊断 xff0c 使用管理员权限打开powershell xff0c 然后依次执行如下语句 xff1a cd 34 C Program Files Docke
  • STC 8051单片机扩展SRAM介绍、使用以及配置

    总述 STC8051系列单片机中很多具有内部扩展的数据存储器SRAM xff08 单片机内部的RAM一般都是SRAM xff0c 区别于SDRAM xff0c 下面叙述中的RAM xff0c 即表示SRAM xff09 xff0c 所谓的内
  • 光电传感器ST188使用总结

    ST188是我接触的第一款红外光电传感器 xff0c 并在很多场合能够很好地发挥作用 首先说一下 xff0c 光电传感器的种类很多 基本的工作原理都是利用光敏二极管接收到一定的红外光信号来实现检测的 按照光电传感器的入光方式 xff0c 可
  • STC管脚上电如何输出低电平

    最近在做一个项目 xff0c 其中电路板部分功能原理是 xff0c STC MCU直接连接ULN2003 xff0c 再驱动ULN2003控制继电器 本来一切正常的 xff0c 后面在细调的时候发现有一个问题 xff0c 就是在电路板上电瞬
  • C++ STL与文件处理操作总结

    STL 标准库 xff0c 英文为Standard Template Library 广义上讲分为三类 xff0c algorithm xff08 算法 xff09 container xff08 容器 xff09 iterator xff