C语言文件中字符串的查找与替换?

#include

#include

#include

#include

int Count=0;

int findNum(char *str)

{

int i=0,t1=0;

FILE *p;

char ch;

if((p=fopen("image.gl","rb"))==NULL)

{

printf("\n打开文件失败\n");

exit(4);

}

while((ch=fgetc(p))!=EOF)

{

if(ch==str[t1])

t1++;

else

t1=0;

if(t1>=strlen(str))

{

printf("找到字符串%s位置为%d\n",str,i-strlen(str)+1);

Count = i-strlen(str)+1;

i=1;

break;

}

i++;

}

fclose(p);

if(!i) return 0;

return i;

}

int main(void)

{

FILE *in,*out;

char *str1="1234567";

char *str2="abcdef";

int i=0,j=0,t1=0,t2=0;

char ch;

if((t1=findNum(str1))==0)

{

printf("没有找到字符串%s\n请按任意键退出\n",str1);

return -1;

}

if((t2=findNum(str2))==0)

{

printf("没有找到字符串%s\n请按任意键退出\n",str2);

return -2;

}

if((in=fopen("image.gl","rb"))==NULL){

printf("\n打开文件失败\n");

exit(2);

}

if((out=fopen("image_new.gl","wb"))==NULL){

printf("\n创建新文件失败\n");

exit(3);

}

i=0;

/* start copy */

while((ch=getc(in))!=EOF)

{

if(t1||t2)

{

if(Count<=80)

{

if(i<=Count) fputc('0',out);

else fputc(ch,out);

}

else

{

if((i>=(Count-80))&&(i<=Count)) fputc('0',out);

else fputc(ch,out);

}

i++;

}

}

fclose(in);

fclose(out);

printf("替换完成!\n任意键关闭!\n");

getch();

}

问题:目前无法确定是否找到了字符串并且替换,而且生成出的文件始终为381KB,请高手予以调试修改!感谢!

雷老虎66

发布

1个回答

void Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)

{

char    *pi, *po, *p;

int     nSrcLen, nDstLen, nLen;

// 指向输入字符串的游动指针.

pi = pInput;

// 指向输出字符串的游动指针.

po = pOutput;

// 计算被替换串和替换串的长度.

nSrcLen = strlen(pSrc);

nDstLen = strlen(pDst);

// 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null).

p = strstr(pi, pSrc);

if(p)

{

// 找到.

while(p)

{

// 计算被替换串前边字符串的长度.

nLen = (int)(p - pi);

// 复制到输出字符串.

memcpy(po, pi, nLen);

memcpy(po + nLen, pDst, nDstLen);

// 跳过被替换串.

pi = p + nSrcLen;

// 调整指向输出串的指针位置.

po = po + nLen + nDstLen;

// 继续查找.

p = strstr(pi, pSrc);

}

// 复制剩余字符串.

strcpy(po, pi);

}

else

{

// 没有找到则原样复制.

strcpy(po, pi);

}

}

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

精华知识

c语言从文件查找字符串,C语言文件中字符串的查找与替换?相关推荐

  1. java字符串数组转json_java中字符串String格式转化成json格式

    java字符串数组转json_java中字符串String格式转化成json格式 String s= Connection.deleteHost("10310");System.o ...

  2. linux模糊匹配文件并删除,在Linux系统中使用dupeGuru查找并移除重复文件的教程

    简介 对我们来说,磁盘被装满是棘手问题之一.无论我们如何小心谨慎,我们总可能将相同的文件复制到多个不同的地方,或者在不知情的情况下,重复下载了同一个文件.因此,迟早你会看到"磁盘已满&quo ...

  3. python字符串怎么表示_python中字符串的几种表达方式(用什么方式表示字符串)...

    原博文 2018-11-21 18:45 − 说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. pytho ...

  4. linux下字符串操作,Linux Bash 中字符串操作

    所谓"子字符串"就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有 ...

  5. linux bash 字符串 连接,Linux Bash 中字符串操作

    Linux Bash 中字符串操作 所谓 "子字符串" 就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 t ...

  6. 怎么把字符串变成数组_Java中字符串split() 的使用方法,没你想的那么简单

    先看下面的方法,事先预测一下,经过split方法,按逗号进行分割为数组之后,生成的数组的长度是多少,目测很多人都觉得是8,但是结果却出乎意料.是5而不是8. private static void t ...

  7. java 字符串不等于_java中字符串不等于怎么判断

    java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...

  8. java中字符串不等于_java中字符串不等于怎么判断

    java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...

  9. java中对字符串进行解析_Java中字符串解析

    1.字符串不属于基本数据类型(基本数据类型有[byte,int,char,float,double,boolean,short,long]),字符串由单个或多个字符组成,本质上是字符数组,Java中提 ...

  10. python字符串排序_列表中字符串按照某种规则排序的方法(python)

    原博文 2017-05-05 16:35 − 有时候处理数据时,想要按照字符串中的数字的大小进行排序. 譬如,存在一组记录文件,分别为'1.dat','2.dat'... 当我把该文件夹中的所有记录文 ...

最新文章

  1. R语言ggplot2可视化为复杂图自定义图例、手动构造图例(legend)实战
  2. linux显示磁盘使用情况命令,Linux显示磁盘使用率信息(iostat)
  3. 【Matlab】绘制热力图和三维热力图
  4. 小辣椒p60手机怎么样_小辣椒双机来临,搭载联发科 最低499元
  5. Git commit your changes or stash them before you can merge
  6. 【飞控理论】从零开始学习Kalman Filters之二:最优状态估计、最优估计算法和方程
  7. 2021年度 Egon Balas 奖得主:达摩院印卧涛
  8. ISDN-PRI,1号,7号信令的基础知识
  9. 同态滤波 matlab代码,同态滤波处理光照不均匀图像Matlab代码
  10. python编解码的字节与字符串相互转换
  11. 什么是商业模式(概念篇)
  12. python 多行注释_python 多行注释
  13. 金碟打印凭证或多联纸格式时十几张后错位
  14. 用计算机算术表白,数学表白密码
  15. 孢子社群:今日推荐人工智能微信群:TensorflowNews.com 9群
  16. 标梵分享微信官方账号运营推广思路
  17. 《我是黑社会》--郭德纲相声
  18. 谷歌浏览器选择已保存的账号密码,输入框变色
  19. mybatis入门学习(九) -DB环境切换、使用注解、事务提交、获取自增ID、多参数传参、鉴别器、内置参数、批量写入、Oracle字段无法插入 null 值
  20. Windows10更新后打开word是写字板形式解决方法

热门文章

  1. 接收list对象_PyTorch入门视频笔记从数组、列表对象中创建Tensor
  2. 安卓开发mysql数据库_Android编程之数据库的创建方法详解
  3. 自动工作负载信息库 AWR
  4. mysql显示表格前五行,深入浅出MySQL勘误表
  5. 不搞虚的!快速把你拉入Docker 的门里
  6. windows系统下maven环境搭建
  7. android中sharedPreferences的用法
  8. 12-Juice饮料
  9. Numpy数据的操作 * dot() multiply() 的区别
  10. 转载:(C++)浅谈多态基类析构函数声明为虚函数