您的位置:首页 > 编程语言 > C语言/C++

在指定文本文件中删除指定字符串C语言

2016-05-25 16:48 351 查看
1.仅仅在控制台上显示,不改变原文件内容

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STRLEN 1024

char * replace(char str[], char temp[]){
//将str中出现的字符串temp删除
char *p = strstr(str, temp);

while(p != NULL){
int len = strlen(temp);
for(p += len; *p != '\0'; p++){
*(p - len) = *p;
}
*(p - len) = '\0';
p = strstr(str, temp);
}

return str;
}

int main(int argc, char * argv[]){

if(argc != 2){//命令行参数错误
fprintf(stderr,"command error\n");
exit(-1);
}

//用以保存一行数据
char str[STRLEN + 1];

while(fgets(str, STRLEN, stdin) != NULL){
//遍历所有行,进行替换并输出
fputs(replace(str, argv[1]),stdout);
}

return 0;
}2.覆盖原文件内容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STRLEN 1024

char * replace(char str[], char temp[]){
//将str中出现的字符串temp删除
char *p = strstr(str, temp);

while(p != NULL){
int len = strlen(temp);
for(p += len; *p != '\0'; p++){
*(p - len) = *p;
}
*(p - len) = '\0';
p = strstr(str, temp);
}

return str;
}

void copy(const char *desName, const char * srcName){
//将scrName文件复制到desName文件中
FILE * des = fopen(desName, "w"), * src = fopen(srcName, "r");
int ch;
while((ch = fgetc(src)) != EOF){
fputc(ch, des);
}
}

int main(int argc, char * argv[]){

if(argc != 3){//命令行参数错误
fprintf(stderr,"command error\n");
exit(-1);
}

FILE * fp = NULL;

if((fp = fopen(argv[2], "r")) == NULL){
//以只读方式打开需要删除字符串的文件
fprintf(stderr,"Error: Unable to open file\n");
exit(-1);
}

//用以保存一行数据
char str[STRLEN + 1];

//获取一个唯一的临时文件名
char tmpFileName[L_tmpnam];
tmpnam(tmpFileName);

FILE * tmp;
if((tmp = fopen(tmpFileName, "w")) == NULL){
//以只写模式打开一个临时文件
fprintf(stderr,"can't create file\n");
exit(-1);
}

while(fgets(str, STRLEN, fp) != NULL){
//遍历待删除文件中的每一行数据,同时将进行删除处理过后的字符串保存到临时文件中
fputs(replace(str, argv[1]),tmp);
}

//将打开的文件关闭
fclose(fp);
fclose(tmp);

//文件复制
copy(argv[2], tmpFileName);

//删除临时文件
remove(tmpFileName);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件操作