实现文件里字符替换功能

思路

首先要打开你要打开的文件例如我这边桌面的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
在这里插入图片描述
运行后
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值