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

来源:互联网 发布:日本柠檬tv网络电视 编辑:程序博客网 时间:2024/05/20 13:07

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);
 }