实现文件里字符替换功能

2023-11-19

思路

首先要打开你要打开的文件例如我这边桌面的demo.txt,利用相关函数计算出这个文件大小,然后开始遍历里面的内容,一个字符一个字符的遍历,如果找到了要被替换的字符就当场重新把新的内容赋值进去,最后重新覆盖整个文章。(可能表达有误,可直接看代码)
在这里插入图片描述

代码

#include <stdio.h>
#include <stdlib.h>

char *strChar()
{
	
	char *str = (char *)malloc(2);
	gets(str);
	return str;
}
char *desChar()
{
	
	char *des = (char *)malloc(2);
	gets(des);
	return des;
}
int main(int argc, char const *argv[])
{
	FILE *fp;
	int cnt = 0;
	int i;
	char readBuf[1024];
	char *a = (char *)malloc(2);
	char *b = (char *)malloc(2);
	
	
	printf("请输入你要被替换的字符\n");
	a = strChar();
	printf("请输入你要替换的字符\n");
	b = desChar();

		//fopen(filename,mode,include_path,context)
	fp = fopen("C:\\Users\\ASUS\\Desktop\\demo.txt","r+");//读写的方式打开
	if(fp == NULL){
		printf("fopen 失败\n");
		exit(-1);
	}
	//1.计算打开文件的大小
		//int fseek(FILE *stream, long int offset, int whence)
	fseek(fp,0,SEEK_END);//光标默认再开头,这里用SEEK_END可以把光标移到文章末尾这样就可以计算出文件大小
	int size = ftell(fp);//计算大小
	printf("文章大小为%d\n",size );
	//2.读取打开文件里面卖的内容
	fseek(fp,0,SEEK_SET);//回到文章头部
		//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
		//从给定流 stream 读取数据到 ptr 所指向的数组中。
	int n_fread = fread(readBuf,sizeof(char)*size,1,fp);//把fp里面的内容读取到readBuf里面去,一次读sizeof(char)*size这么大,读一次
	if(n_fread < 0){
		printf("fread出错\n");
		exit(-1);
	}
	//3.遍历里面的内容,找到需要被替换的字符并进行替换赋值
	for(i = 0; i < size+1; i++){
		if(readBuf[i] == *a){
			readBuf[i] = *b;
			cnt++;
		}
	}

	//4.将readBuf里面内容在写到fp中
	fseek(fp,0,SEEK_SET);//回到文章头部
		//size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
		//把 ptr 所指向的数组中的数据写入到给定流 stream 中
	int n_write = fwrite(readBuf,sizeof(char)*size,1,fp);
	if(n_write < 0){
		printf("n_write失败\n" );
		exit(-1);
	}
	printf("修改了%d次\n",cnt);
	fclose(fp);

	return 0;
}

结果

运行前的demo.txt
在这里插入图片描述
运行后
在这里插入图片描述
在这里插入图片描述

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

实现文件里字符替换功能 的相关文章

  • Qt编程学习笔记

    新建项目 gt 其他项目 gt Empty qmake Project 添加新文件 项目 gt run gt Run in terminal 发现cin gt gt a无法向a输入数据 检查 pro文件发现缺少参数CONFIG consol
  • chrome黑暗模式设置

    1 前言 使用Chrome有很久了 但一直没发现有令人满意的黑暗模式 期间试过通过在谷歌商店中安装黑暗主题 但感觉不好 主要有以下 除了chrome的界面是黑暗模式外 打开其它的页面还是亮模式 我希望黑暗模式支持以下特性 chrome的标签
  • Android ViewPager实现导航页效果

    效果 源码地址 文章翻译自 https www cnblogs com aademeng articles 6238933 html 代码 MainActivity public class MainActivity extends App

随机推荐

  • mysql APPARENT DEADLOCK!!! Complete Status:Managed Threads: 3 (c3p0,druid)

    问题场景 由于在生产环境出现问题 应用挂掉 作为菜鸟运维 解决问题有点忙手忙脚 线上bug修复 重启tomcat 启动报错 错误截图在下面 根据日志分析像是死锁 使用C3P0连接池 tomcat启动完之后 还能正常运行 解决问题经过 网上有
  • v4l2在帧缓冲区预览摄像头

    在应用层通过v4l2 api将采集的摄像头数据yuv转为rgb后写到帧缓冲区达到预览摄像头的目的 程序运行后切换到tty下就可以看到 我的屏幕是bgra格式的 这点要注意 不同屏幕格式不同 不同r g b的偏移通过修改 0x00 lt lt
  • Activiti定时器事件

    定时器事件用于在特定的日期 时间或者周期触发一个事件 它们可以用做开始事件 中间事件 边界事件 边界事件可以是中断的 也可以是非中断的 默认是中断事件 即当触发定时器时 原执行实例会被删除 开始事件定时器 定时器开始事件用于在指定的时间点或
  • 专利检索工具网站分享

    当今有很多专利检索工具可供使用 以下是一些常用的专利检索工具网站 全球专利数据库 https patentscope wipo int search zh search jsf 中国专利数据库 http www pss system gov
  • 爬虫从入门到放弃——开源爬虫框架

    本文参考自知乎 供本人学习使用 作者 老夏 链接 https www zhihu com question 27042168 answer 70821088 目前主流的网络爬虫框架包括但不限于 Nutch Crawler4j WebMagi
  • java yaml配置处理,yaml格式化,yaml节点增加,删除。多yaml合并

    多环境配置文件管理 增加一个配置属性 多套环境配置文件需同时增加 如果忘记了 那么就报错 对多环境配置文件进行管理 使用yaml作为文件时 就涉及到yaml的一些解析 修改 新增操作 java管理yaml 1 环境依赖 2 snakeyam
  • C++基础3:仿函数

    系列文章目录 C 基础 开篇 C 基础1 从const关键字看变量的基础单元 类 C 基础2 构造函数 拷贝构造 赋值运算符重载 文章目录 系列文章目录 前言 一 什么是仿函数 二 实现步骤 1 定义类 2 重载 运算符 3 使用仿函数 4
  • pytorch 2.0初探:和pytorch 1.13的速度对比

    看到pytorch2 0出来了 而且宣传提速明显 一行代码即可提速43 左右 compiled model torch compile model We then measure speedups and validate accuracy
  • tex 表格中内容左对齐/居中/右对齐

    左对齐是l 右对齐是r 居中是c begin table centering caption label tab widgets Notation summary begin tabular l l 就是这里控制每一列的对齐方式 Notat
  • 史上最简单的SpringCloud教程

    在微服务架构中 需要几个基础的服务治理组件 包括服务注册与发现 服务消费 负载均衡 断路器 智能路由 配置管理等 由这几个基础组件相互协作 共同组建了一个简单的微服务系统 一个简答的微服务系统如下图 注意 A服务和B服务是可以相互调用的 作
  • 异常数据检测

    文章目录 效果一览 文章概述 部分源码 参考资料 效果一览 文章概述 信号分解算法 Matlab基于一维小波分解算法 Wavelet Decomposition 的信号分解算法 部分源码
  • 标准代码书写准则,避免屎山代码风格指南

    牛马程序员 强推 屎山代码风格指南 github 开源地址 https github com trekhleb state of the art shitcode tree master 这是一个你的项目应该遵循的标准代码书写准则的列表 把
  • centos7安装python3.x(多种方式)

    但行好事 莫问前程 有任何疑问请留言 作者有问必答哦 前言 centos系统本身默认安装有python2 x 版本x根据不同版本系统有所不同 可通过 python V 或 python version 查看系统自带的python版本 有一些
  • java POI在excel中插入等比例缩放的图片

    这个缩放的比例不是很准确 但还凑合能用 目前本人找不到其它方法 就先用这个 先看一个关键的API方法 void org apache poi ss usermodel Picture resize double scaleX double
  • DES加解密算法

    DES加解密算法 单密钥对称加解密算法 入口参数有三个 key data mode key为加密解密使用的密钥 data为加密解密的数据 mode为其工作模式 当模式为加密模式时 明文按照64位进行分组 形成明文组 key用于对数据加密 当
  • githubActions部署文件到服务器

    示例 githubAction配置示例 ssh秘钥方式 首先在服务器生成秘钥 参考https github com easingthemes ssh deploy 安装 rsync apt get install rsync 参考 参考 n
  • Go 流程控制 for、for range 循环

    在Go语言中 for循环是一种常用的流程控制语句 可以重复执行一段代码块 直到满足退出条件 同时 Go语言还提供了for range循环 用于遍历数组 切片 映射和字符串等数据结构 在本篇博客中 我们将介绍Go语言中的for循环和for r
  • USART HMI智能串口屏介绍

    概要 USART HMI智能串口屏 该显示屏的介绍 GUI界面的设计 通讯方式和修改控件参数的相关指令等 一开始我们项目组在显示上用的是12864液晶显示屏 带字库 但是看起来效果不是很好 感觉很LOW 而且不知道什么原因 12864常常会
  • Redis主从复制总结整理

    Redis的主从复制策略是通过其持久化的rdb文件来实现的 其过程是先dump出rdb文件 将rdb文件全量传输给slave 然后再将dump后的操作实时同步到slave中 让从服务器 slave server 成为主服务器 master
  • 实现文件里字符替换功能

    思路 首先要打开你要打开的文件例如我这边桌面的demo txt 利用相关函数计算出这个文件大小 然后开始遍历里面的内容 一个字符一个字符的遍历 如果找到了要被替换的字符就当场重新把新的内容赋值进去 最后重新覆盖整个文章 可能表达有误 可直接