c语言补丁替换函数 c语言 替换( 二 )


/* 以串 v 置换串 s 中出现的所有和串 t 相同的非空串*/
{/*第8组测试数据不通过,原因:内存重叠
*V到T之间只有20个字节的空间
*以V为初始地址,当存放在数据大于20个字节时会把V串的值
*给覆盖掉 。
*/
int start = 1; //从1开始
int len = StrLength(T);///
int len_S = StrLength(S);
StringType temp, head;
StringType T1, T2; //设立多个变量 , 解决内存重叠的问题
InitStr(temp);
InitStr(T1);
InitStr(T2);
InitStr(head);
StrAssign(T1, T); //
while(start = len_S){
if(StrCompare(SubString(S, start, len), T1) == 0){
//如果匹配,将串T替换成V后,再将原串S中start位置开始的串赋予V
StrAssign(temp, V);//用temp储存原来的V 。
Concat(V, SubString(S, start + len, len_S - start - len + 1));
//start位置之前的串赋予head
StrAssign(head, SubString(S, 1, start - 1));
//start位置之前的串跟V串合并
StrAssign(S, Concat(head, V));
StrAssign(V, temp);
start += StrLength(V);
len_S = StrLength(S);
}
else
start++;
}
}
用指针编写一个替换函数(C语言版)这是因为:file=fopen("/tmp/test/test","a+");
模式 “a+” 中的 a 规定以只写打开,保留 。
因此你不能读,只能写 。写的时候只能在的末尾开始写 。
即使你将重新定位过,
在执行写操作的时候,
回到的末尾了 。
也就是被保护起来 , 你是无法操作的 。
无法操作的定义是:不能再对执行添加,删除,插入等 。
因此,你要在的开头插入数据 , 可能要绕个弯子:
1.用只读模式("a") 先读出,保存到内存
2.用只写模式(“w”)清除
3.文件开头插入的信息 。
4.再追加(保存在内存)
当然如果在文件末尾添加就方便多了,用 "a" 模式一步到位 。
下面使用这种思路进行插入信息的示例代码:
#include stdio.h
#include stdlib.h
#includestring.h
const int MAX_FILE_SIZE = 100;
//读取文件内容
int fileRead(char fileName[],char content[],int* content_len)
{
FILE *infile;
char ch;
infile=fopen(fileName,"r");
*content_len=0;
if(infile==NULL)
{
printf("get infile eroor\n");
return 0;
}
else
{
rewind(infile);
while(EOF!=(ch=fgetc(infile)))
{
content[(*content_len)++]=ch;
}
}
fclose(infile);
return 1;
}
//在文件末尾追加内容
int fileAppend(char fileName[] ,charcontent[],int content_len)
{
FILE *outfile;
outfile=fopen(fileName,"a");
fwrite(content,content_len,1,outfile);
fclose(outfile);
}
int fileClear(char fileName[])
{
FILE *file = fopen(fileName,"w");
fclose(file);
}
//在文件开头插入内容
int insetMessageInfile(char fileName[] ,charmessage[],int message_len)
{
char content[MAX_FILE_SIZE];
intcontent_len=0;
fileRead(fileName,content,content_len);
fileClear(fileName);
fileAppend(fileName,message,strlen(message));
fileAppend(fileName,content,content_len);
}
int main(void) {
char fileName[] = "data.txt";
char msg[3]="12";
//文件内容缓存区
char content[MAX_FILE_SIZE];
intcontent_len=0;
int i;
fileRead(fileName,content,content_len);
for(i=0;icontent_len;i++) printf("%c",content[i]);
printf("\n");
insetMessageInfile("data.txt",msg,strlen(msg));
fileRead(fileName,content,content_len);
for(i=0;icontent_len;i++) printf("%c",content[i]);
printf("\n");
return EXIT_SUCCESS;
}

推荐阅读