#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
FILE* filepointer(const char *file,const char *mode);
void insert_str(char* str,char* flag,size_t sl,size_t fn);
void replace_gtr_str(char* str,char* flag,size_t sl,size_t fl);
void replace_lss_str(char* str,char* flag,size_t subl,size_t fl);
void replace_equ_str(char* str,char* flag,size_t fl);
//字符串大小
#define Max 1024
int main(int argc,char **argv)
{
FILE* fp=filepointer("test.txt","rb");
FILE* fpo=filepointer("result.txt","wb");
static char str[Max];
static char substr[Max]={"888"};
static char flag[Max]={"<A>"};
char *p=str;
while (fgets(str,Max,fp))
{
p=str;
for (;;)
{
p=strstr(p,substr);
if (p == NULL) break;
if (strlen(substr) < strlen(flag)) replace_lss_str(p,flag,strlen(substr),strlen(flag));
else if (strlen(substr) > strlen(flag)) replace_gtr_str(p,flag,strlen(substr),strlen(flag));
else if (strlen(substr) == strlen(flag)) replace_equ_str(p,flag,strlen(flag));
}
fprintf(fpo,"%s",str);
}
fclose(fp);
fclose(fpo);
return 0;
}
FILE* filepointer(const char *file,const char *mode)
{
FILE *fp;
if (!(fp = fopen(file,mode)))
{
printf("open fail! [%s]:%s\n",file,strerror(errno));
exit(EXIT_FAILURE);
}
return fp;
}
/*
在字符串开始插入指定字符串
str 原字符串的起点
flag 指定字符串
sl 原字符串长度
fl 指定字符串长度
*/
void insert_str(char* str,char* flag,size_t sl,size_t fl)
{
memmove(str+fl,str,sl+1);//+1存放结束符'\0'
memmove(str,flag,fl);
}
/*
被替换字符串长度大于替换字符字符串长度
explanation:
str=abcd,flag=abc
str 原字符串的起点
flag 替换的字符串
sl 被替换字符长度
fl 替换字符串长度
*/
void replace_gtr_str(char* str,char* flag,size_t sl,size_t fl)
{
memmove(str+fl,str+sl,sl+1);
memmove(str,flag,fl);
}
/*
被替换字符长度小于替换字符串长度
删除被替换字符串
explanation:
str=abc,flag=abcd
str 原字符串的起点
flag 替换的字符串
subl 被替换字符长度
fl 替换字符串长度
*/
void replace_lss_str(char* str,char* flag,size_t subl,size_t fl)
{
register size_t temp=strlen(str)-subl;//剩余字符串长度
memmove(str+fl,str+subl,temp+1);
memmove(str,flag,fl);
}
/*
被替换字符串与指定字符串相等
explanation:
str=abc,flag=abc
str 原字符串的起点
flag 替换的字符串
fl 替换字符长度
*/
void replace_equ_str(char* str,char* flag,size_t fl)
{
memmove(str,flag,fl);
}