当前位置:首页 » 编程语言 » c语言文件字符串替换
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言文件字符串替换

发布时间: 2022-01-30 02:46:00

c语言编程:查找并替换此英文文本文件中某字符串

//************************************
//Method:strrpl
//FullName:strrpl
//Access:public
//Returns:void
//Qualifier:字符串替换函数,能替换所有的要替换的字符串,被替换的字符串和替换的字符串不一定一样长.
//Parameter:char*pDstOut,输出字符串,要保证足够的空间可以存储替换后的字符串.
//Parameter:char*pSrcIn,输入字符串.
//Parameter:char*pSrcRpl,被替换的字符串.
//Parameter:char*pDstRpl,替换后的字符串.
//注意:以上的字符串均要以''结尾.
//************************************

voidstrrpl(char*pDstOut,char*pSrcIn,constchar*pSrcRpl,constchar*pDstRpl)
{
char*pi=pSrcIn;
char*po=pDstOut;

intnSrcRplLen=strlen(pSrcRpl);
intnDstRplLen=strlen(pDstRpl);

char*p=NULL;
intnLen=0;

do
{
//找到下一个替换点
p=strstr(pi,pSrcRpl);

if(p!=NULL)
{
//拷贝上一个替换点和下一个替换点中间的字符串
nLen=p-pi;
memcpy(po,pi,nLen);

//拷贝需要替换的字符串
memcpy(po+nLen,pDstRpl,nDstRplLen);
}
else
{
strcpy(po,pi);

//如果没有需要拷贝的字符串,说明循环应该结束
break;
}

pi=p+nSrcRplLen;
po=po+nLen+nDstRplLen;

}while(p!=NULL);
}

Ⅱ c语言编程替换文件中字符串

方法和详细的操作步骤如下:

1、第一步,依次单击visual C ++ 6.0的“文件”-->“新建”-->“文件”-->“C++ Source File”选项,见下图,转到下面的步骤。

Ⅲ C语言 查找并替换文件中字符串问题

#include<stdio.h>

int main()
{
FILE *fp;
FILE *fp2;
fp = fopen("test.txt","r");

char in[100];
char check[100];
char out[100];
char c;
int count=0;
printf("input a string to search: \n");
scanf("%s",in); /*in本身就是地址,&in指的是同一个地址,但本质上有区别,后者指的整个数组空间*/

while((c=fgetc(fp)) != EOF)
{
/*问题在这里,你先是fgetc了,也就是说读了一个字符了,想一想你每次都是在while里读一个字符串,再在()里做判断,字符串后面不就是紧跟着换行吗?*/
fscanf(fp,"%s",check);//同上
if(strcmp(in,check)==0)
count++;
memset(check,0x00,sizeof(check));
}

printf("count: %d\n",count+1);

printf("input a word to replace:\n");
scanf("%s",&out);//你懂的

fclose(fp);//记得文件使用完一定要关闭
fp = fopen("test.txt","r");
fp2 = fopen("test-new.txt","w");

while((c=fgetc(fp)) != EOF)
{
fscanf(fp,"%s",&check);//

if(strcmp(in, check)==0)
{
fprintf(fp2, "%s", out);
}
else
fprintf(fp2, "%s",check);
memset(check,0x00,sizeof(check));
}
system("pause");
//关闭文件!
}

Ⅳ C语言中如何将文件中的几个字符替换成另外几个字符

我写过一个查找文件中关键字的程序,可惜找不到了,把思路告诉你,你要是需我给你写的话就联系我
[email protected]
获取关键字,得到它的长度,然后从操作文件中读取这么长的字符串,进行比较,把文件指针指向下一个字符(注意,要一个字符一个字符的向下进行),这样就可以把需要的关键字找出来,如果想替换的话,把读取出的数组改成想要得,最后别忘记fcolse();

Ⅳ C语言文件中字符串的查找与替换

用"rb" open, 用 fread 读, 用 fwrite 写.
记录地点 用 fgetpos.

下面程序例子是按你的原来题意,找目标字串,输出用替代字.直接用文件操作,不开单元存放文件.

输入文件 a.txt 输出文件 tmp.txt

至于你的新要求,给你提示记录地点的方法.你可以rewind(fin),从头一个字一个字读,读一个输出一个,读到的位置等于POS[i]-80时,读80个字但不输出,这就去掉了80个字.
例如找到的POS[]共NN个。
#define buff_size 1024
long int n,n1,n2,i,j,k;
char *buff;
buff=(char*) malloc(buff_size * sizeof(char));
rewind(fin);
for(k=0;k<NN;k++){
if (k==0) {n=POS[k]-80;} else {n=POS[k]-POS[k-1]-80;};
n1 = n / buff_size; n2 = n % buff_size;
if (n1 >0) for (i=0;i<n1;i++){
fread(buff,sizeof(char),buff_size,fin);
fwrite(buff,sizeof(char),buff_size,fout);
};
if (n2 > 0) {fread(buff,sizeof(char),n2,fin);
fwrite(buff,sizeof(char),n2,fout);
};
fread(buff,sizeof(char),80,fin);
for (i=0;i<80;i++) buff[i]='0'; buff[80]='\0';
fwrite(buff,sizeof(char),80,fout);
} ; end for k
这里请自己写 读最后一段,无需改零,读一个字,输出一个字,直到EOF.
-----------------
#include <stdio.h>
#include <stdlib.h>

void main (int argc, char *argv[])
{
FILE *fin,*fout;
char namein[72]="a.txt";
char nameout[72]="tmp.txt";
char target[120],tidai[120];
char work[120];
int L1,L2,i,k=0;
int numread;
fpos_t pos;
fpos_t POS[100];

printf("Enter target string: ");
scanf("%s",&target[0]);
L1 = strlen(target);
printf("Enter replace string: ");
scanf("%s",&tidai[0]);
L2 = strlen(tidai);

if ( (fin = fopen(namein,"rb") ) == NULL ) {
printf("\007Cann't open input file: %s ", namein);exit(1);
};

if ( (fout = fopen(nameout,"wb") ) == NULL ) {
printf("\007Cann't open temp work file: %s ", nameout);exit(1);
};

Lab1:
numread = fread( work, sizeof( char ), L1, fin );
if (numread < L1) {
// fwrite( work, sizeof( char ), numread, fout );
goto done;
};
if ( strncmp(work,target,L1) == 0 ){
// fwrite( tidai, sizeof( char ), L2, fout );
if( fgetpos( fin, &pos ) != 0 ) perror( "fgetpos error" );
else { POS[k] = pos-L1; k=k+1;};

goto Lab1;
};

Lab2:
// fwrite( &work[0], sizeof( char ), 1, fout );
for (i=0;i<L1-1;i++) work[i]=work[i+1];
fread( &work[L1-1], sizeof( char ), 1, fin );
if (feof(fin)) {
// fwrite( &work[1], sizeof( char ), L1-1, fout );
goto done;
};
if ( strncmp(work,target,L1) == 0 ){
// fwrite( tidai, sizeof( char ), L2, fout );
if( fgetpos( fin, &pos ) != 0 ) perror( "fgetpos error" );
else { POS[k] = pos-L1; k=k+1;};
goto Lab1;
} else {goto Lab2;};

// 新述 rewind(fin); 那部分程序语句插在这里,声明放前面

done: fclose(fin);fclose(fout);
printf("output in %s\n",nameout);
for (i=0;i<k;i++){
printf("%ld \n",(long int) POS[i]);
}
exit(0);
}

Ⅵ 在c语言编程中如何实现程序对文本文件中字符串进行替换及生成新的文本文件

我以前刚学C++的时候写过一个相似的程序,如果你要的是纯C语言下的编程,那么你就参考一下,这个算法的原理是一样的,即读入一个字符就显示出来。当然你也可以考虑其他实现方式。这个C++的程序中,和C语言区别的主要是有些输入和输出不太一样。还有system("pause")这个是调用系统暂停功能,可能在TC等编译环境下不能使用,可以考虑使用getch()替换。至于system("cls")是清屏。
相关功能函数为Display_text(),

#include<iostream>
#include<fstream>
#include <iomanip>
#include<windows.h>
using namespace std;

#define MaxSize 65535
int tag[100]; //匹配关键字的字符下标,设定最多找到100个关键字

typedef struct
{
char data[MaxSize]; //记录字符值
int len; //保存有效字符串长度
}SqString;

void MainMenu(); //显示主菜单
void Select_function(char op); //功能选择
void Display_text(); //显示本文内容
void Count_ch(); //统计字符数,空格数,行数
void Search_KeyWord(); //检索关键字
void Replace_KeyWord(); //替换关键字
void index(SqString s,SqString t); //简单匹配算法(BF)
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor); //颜色函数

int main()
{
MainMenu();
return 0;
}

void MainMenu() //显示主菜单
{
char op;
cout<<"I——打开文本文件\n";
cout<<"T——统计\n";
cout<<"S——检索\n";
cout<<"R——替换\n";
cout<<"Q——退出\n\n";
cout<<"请选择:";
cin>>op;
Select_function(op);
}

void Select_function(char op) //功能选择
{
switch(op)
{
case 'i':
case 'I':Display_text();break;
case 't':
case 'T':Count_ch();break;
case 's':
case 'S':Search_KeyWord();break;
case 'r':
case 'R':Replace_KeyWord();break;
case 'q':
case 'Q':exit(0);
default:cout<<"输入错误,请重新选择"<<endl;
system("pause");system("cls");
MainMenu();
break;
}
}

void Display_text() //显示本文内容
{
int i=0;
char c,ch[150];
cout<<"请输入文件名:"<<endl;
cin>>ch;
system("cls");
ifstream infile;
infile.open(ch,ios::in);
if(!infile)
{
cerr<<"Open file error!"<<endl;
system("pause");system("cls");
MainMenu();
}
while(infile.get(c))
{
cout<<c;
i++;
if(i>=1000&&c=='\n'||i>=1500)
{
cout<<endl<<endl;
system("pause");system("cls");
i=0;
}
}
infile.close();
SetColor(11,8);
cout<<endl<<"文本内容结束!"<<endl;
SetColor(7,0);
system("pause");system("cls");
MainMenu();
}

void Count_ch() //统计字符数,空格数,段落数
{
int i=0,j=0,k=0;
char c,ch[150];
cout<<"请输入文件名:"<<endl;
cin>>ch;
system("cls");
ifstream infile;
infile.open(ch,ios::in);
if(!infile)
{
cerr<<"Open file error!"<<endl;
system("pause");system("cls");
MainMenu();
}
while(infile.get(c))
{
i++;
if(c==' ')j++;
if(c=='\n')k++;
}
infile.close();
SetColor(11,8);
cout<<"字符数:"<<i<<endl;
cout<<"空字符数"<<j<<endl;
cout<<"段落数(回车次数)"<<k<<endl;
SetColor(7,0);
system("pause");system("cls");
MainMenu();
}

void Search_KeyWord() //检索关键字
{
int i=0,j=0,k=0;
char c,ch[150],kw[50];
SqString s,t;
cout<<"请输入文件名:"<<endl;
cin>>ch;
system("cls");
ifstream infile;
infile.open(ch,ios::in);
if(!infile)
{
cerr<<"Open file error!"<<endl;
system("pause");system("cls");
MainMenu();
}
cout<<"请输入关键字:";
cin>>kw;
cout<<endl;
while(infile.get(c)&&i<MaxSize)
{
s.data[i]=c;i++;
}
s.len=i;
infile.close();
for(i=0;kw[i]!='\0';i++)
t.data[i]=kw[i];
t.len=i;
index(s,t);
if(tag[0]==-1)cout<<"无此关键字"<<endl;
else
{
for(i=0;i<=s.len;i++)
{
if(i==tag[j])
{
for(;i<tag[j]+t.len;i++)
{
SetColor(10,8);
cout<<s.data[i];
SetColor(7,0);
}
j++;
}
else cout<<s.data[i];
k++;
if(k>=1500&&s.data[i]=='\n'||k>=2000)
{
cout<<endl<<endl;
system("pause");system("cls");
k=0;
}
}
SetColor(11,8);
cout<<endl<<endl<<"文本内容结束!"<<endl;
SetColor(7,0);
}
system("pause");system("cls");
MainMenu();
}

void Replace_KeyWord() //替换关键字
{
int i=0,j=0,k=0;
char c,ch[150],kw[50],nkw[50];
SqString s,t,nt;
cout<<"请输入文件名:"<<endl;
cin>>ch;
system("cls");
ifstream infile;
infile.open(ch,ios::in);
if(!infile)
{
cerr<<"Open file error!"<<endl;
system("pause");system("cls");
MainMenu();
}
cout<<"请输入关键字:";
cin>>kw;
cout<<endl;
while(infile.get(c)&&i<MaxSize)
{
s.data[i]=c;i++;
}
s.len=i;
infile.close();
for(i=0;kw[i]!='\0';i++)
t.data[i]=kw[i];
t.len=i;
index(s,t);
if(tag[0]==-1)cout<<"无此关键字"<<endl;
else
{
cout<<"请输入新的字符替代原关键字:"<<endl;
cin>>nkw;
for(i=0;nkw[i]!='\0';i++)
nt.data[i]=nkw[i];
nt.len=i;

for(i=0;i<=s.len;i++)
{
if(i==tag[j])
{
for(int n=0;i<tag[j]+nt.len;i++,n++)
{
s.data[i]=nt.data[n];
SetColor(10,8);
cout<<s.data[i];
SetColor(7,0);
}
j++;
}
else cout<<s.data[i];
k++;
if(k>=1500&&s.data[i]=='\n'||k>=2000)
{
cout<<endl<<endl;
system("pause");system("cls");
k=0;
}
}

SetColor(11,8);
cout<<endl<<endl<<"文本内容结束!"<<endl;
SetColor(7,0);
}
fstream outfile(ch,ios::out);
if(!outfile)
{
cerr<<"Open file error!"<<endl;
system("pause");system("cls");
MainMenu();
}
for(i=0;i<=s.len;i++)
{
outfile<<s.data[i];
}
outfile.close();
system("pause");system("cls");
MainMenu();
}

void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) //颜色函数
{
HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}

void index(SqString s,SqString t) //简单匹配算法(BF)
{
int i=0,j=0,k=0;
h0: while(i<s.len&&j<t.len)
{
if(s.data[i]==t.data[j])
{
i++;j++;
}
else
{
i=i-j+1;j=0;
}

}
while(j>=t.len)
{
tag[k]=i-t.len;
k++;
i++;j=0;
goto h0;
}
if(k==0)tag[0]=-1;
}

Ⅶ C语言在文本文件中查找并替换字符串。

有一个 高效的字符串匹配算法 KMP 可以看看 不过 你用一般的方法也可以

Ⅷ c语言 读取文本文件替换字符

#include <stdio.h>

int main()
{
FILE *in, *out;
char ch;

if((in = fopen("d:\\1.txt", "r")) == NULL)
{
printf("无法打开输入文件!\n");
return 1;
}
if((out = fopen("d:\\2.txt", "w")) == NULL)
{
printf("无法打开输出文件!\n");
return 2;
}
while((ch = getc(in)) != EOF)
if(ch == '\t')
fprintf(out, "----");
else
putc(ch, out);
fclose(in);
fclose(out);
return 0;
}

Ⅸ c语言:如何将字符串中指定的字符替换为另一个指定字符

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

Ⅹ C语言文本文件中字符串的查找与替换。

#include<stdio.h>
#include<string.h>
#include<math.h>
intmain()
{

charfilename[10],string1[15],string2[15],line[100];

FILE*pfile=NULL;

scanf("%s%s%s",filename,string1,string2);

pfile=fopen(filename,"r+");

if(!pfile)
{
perror("文件不存在");
return1;
}
printf("将把文件%s中字符串%s替换成%s ",filename,string1,string2);
while(!feof(pfile))
{
char*index=NULL;
fgets(line,100,pfile);
index=strstr(line,string1);
if(index)
{
intd2=strlen(string2);
intd1=strlen(string1);
printf("%s中有%s ",line,string1);
if(d1!=d2)
{
memmove(
index+d1+d2-d1,
index+d1,
strlen(line));


}
memcpy(index,string2,strlen(string2));

fseek(pfile,-strlen(line)+d2-d1,SEEK_CUR);
fputs(line,pfile);
fflush(pfile);
}



}

fclose(pfile);
return0;
}