问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

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

发布网友 发布时间:2022-05-18 02:17

我来回答

1个回答

热心网友 时间:2022-04-26 20:16

我以前刚学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;
}
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
lim(tan^3(3x)/(X^2sin(2x))(x趋近于0) 用等价无穷小计算下列极限,谢谢了,急。。 请问一下数学极限linit sin2x/tan3x如何求解,要过程,谢了,加急... lim(sin2x+x^2)/tan3x的极限怎么算 , x趋近于0 手机电池修复方法(手机用久了电池不耐用?教你一键修复) 数字电视如何填写参数 湖南电视台本振频率、下行频率、符号率 孩子太过于听话,为何是父母教育的失败? 炖牛肉怎么好吃 制作炖牛肉的方法 日产轩逸刹车油漏到真空泵里 Qt两个QString类型比较 QTextEdit 怎样让写入的字符串不换行啊 / 蓝讯 c++输入一个由若干单词组成的问本行(最多80个字符),每个单词之间用若干个空格隔开,统计文本行中单词的个 求qt Qstring 中多个连续的空格替换成一个空格的方法? Qt编程中如何去掉字符串中多余的空格 QT如何去掉字符串中的空格 牛板筋怎么弄发脆 牛底板怎么涨发 牛板筋怎么做吃上可以脆 关于ABCC式的词语有哪些? abcc式的词语50个 煞的形近字 黝的形近字,煞形近字,霍的形近字 煞的形近字? 煞的形近字是什么啊 煞的形近字组词 《水浒传》概括一下情节 血刃潘金莲, 斗杀西门庆, 醉打蒋门神, 大闹飞云浦, 血溅鸳鸯楼, 除恶蜈蚣岭。 武松斗杀西门庆 水浒传武松所有故事概括,每个不到五十字,一两行即可,最简洁的语言,急!!!!!! 武松都杀西门庆 整个故事情节 现代语言概括 求qt Qstring 中多个连续的空格替换成1个空格的方法? qt5 listwidget读取txt文件,怎么去掉多余的空格,空行?c++ 关于易语言皮肤问题。 怎么让易语言一秒换一个皮肤 易语言加载she皮肤方法, 易语言33个皮肤模块如何使用?? 易语言33个皮肤模块怎样使用?我载入模块了,但是不知道怎样用。 易语言加载skn皮肤文件 昆明到毕节的火车票几点才能到? 毕节到富源的高铁要多少钱? 谭佳润这个名字怎么样 毕节到昆山南站有高铁&#xF684;吗? 为什么说微胖是最好的身材? 坐高铁以勒到昆明北站多少钱? 阳历八月二十七日中午十一点二十九分出生 女 姓李 求名三个字的 中间有个佳字 要有含义 为什么说微胖的女人更招人疼? 胖女人有什么优点 娶胖女孩的好处? 史嘉润,农历2009年5月初8下午3点半出生,帮忙查一下这个名字的得分 毕节到昆明现在飞机票多少
  • 焦点

最新推荐

猜你喜欢

热门推荐