當前位置:首頁 » 編程語言 » 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;
}