|
发表于 2020-3-31 16:34:11
|
显示全部楼层
- #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);
- }
复制代码 |
|