C语言代码段:Replace函数和逐行读取文本文件

本文介绍了一个C语言中的字符串替换函数实现方法,通过自定义的replace函数可以实现在字符串中查找并替换指定子串的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中的字符串替换Replace函数

char *replace(char *source, char *sub, char *rep)
{
 char *result;
 /*pc1 是复制到结果result的扫描指针*/
 /*pc2 是扫描 source 的辅助指针*/
 /*pc3 寻找子串时,为检查变化中的source是否与子串相等,是指向sub的扫描指针 */
 /*找到匹配后,为了复制到结果串,是指向rep的扫描指针*/
 char *pc1, *pc2, *pc3;
 int isource, isub, irep;
 isub = strlen(sub);  /*对比字符串的长度*/
 irep = strlen(rep);  /*替换字符串的长度*/
 isource= strlen(source); /*源字符串的长度*/
 if(NULL == *sub)
  return strdup(source);
 /*申请结果串需要的空间*/
 result = (char *)malloc(( (irep > isub) ? (float)strlen(source) / isub* irep+ 1:isource ) * sizeof(char));
 pc1 = result; /*为pc1依次复制结果串的每个字节作准备*/
 while(*source != NULL)
 {
  /*为检查source与sub是否相等作准备,为pc2,pc3 赋初值*/
  pc2 = source;
  pc3 = sub;
  /* 出循环的(任一)条件是:
  * *pc2 不等于 *pc3 (与子串不相等)
  * pc2 到源串结尾
  * pc3 到源串结尾 (此时,检查了全部子串,source处与sub相等)
  *****************************************************/
  while(*pc2 == *pc3 && *pc3 != NULL && *pc2 != NULL)
  { 
   pc2++;
   pc3++; }
  /* 如果找到了子串,进行以下处理工作*/
  if(NULL == *pc3)
  {
   pc3 = rep;
   /*将替代串追加到结果串*/
   while(*pc3 != NULL)
    *pc1++ = *pc3++;
   pc2--;
   source = pc2;
   /*  检查 source与sub相等的循环结束后,
   * pc2 对应的位置是在 sub 中串结束符处。该是源串中下一个位置。
   * 将 source 指向其前面一个字符。
   ***************************************************/
  }
  else /*如果没找到子串,下面复制source所指的字节到结果串*/
   *pc1++ = *source;
  source++; /* 将source向后移一个字符*/
 }
 *pc1 = NULL;
 return result;
}

测试:

 char *str = "{name}你好,你是{name}吗?";
 str= replace(str,"{name}","客户"); 
 printf("%s",str);
 free(str);

逐行读取文本文件的代码:

 int maxLen = 1024;
 char buf[MAX_LINE];
 FILE *fp;
 int len;
 if((fp = fopen("c:/boot.ini1", "r")) == NULL)
 {
  printf("文件打开失败!");
  return;
 }
 while(fgets(buf, MAX_LINE, fp) != NULL)
 {
  len = strlen(buf);
  buf[len - 1] = '\0';
  printf("%s\n", buf);
 }

如鹏网.Net培训班正在报名,有网络的地方就可以参加如鹏网的学习,学完就能高薪就业,点击此处了解

 

    三年前只要懂“三层架构”就可以说“精通分层架构”;现在则需要懂IOC(AutoFac等)、CodeFirst、lambda、DTO等才值钱;

    三年前只要会SQLServer就可以说自己“精通数据库开发”;现在则需还需要掌握MySQL等开源数据库才能说是“.Net开源”时代的程序员;

    三年前只要会进行用户上传内容的安全性处理即可;现在则需要熟悉云存储、CDN等才能在云计算时代游刃有余;

    三年前只要掌握Lucene.Net就会说自己“熟悉站内搜索引擎开发”;现在大家都用ElasticSearch了,你还用Lucene.Net就太老土了;

    三年前发邮件还是用SmtpClient;现在做大型网站发邮件必须用云邮件引擎;

    三年前缓存就是Context.Cache;现在则是Redis、Memcached的天下;

    如鹏网再次引领.Net社区技术潮流!点击此处了解如鹏网.Net最新课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值