下面的状态表示:
0: 正在分析
1:读到第一个/
2:读完第二个/,"//...
3:读到 "/*...
4:读到 "/*...*
5:读到第一则笑个"
6:读到字符串里的转义符 "...\
7:找到注释
0和7是等价的状态,但是可以用7状态做些特别的吵携事情,比如这个时候删除刚找到的注释等。最后的程序孙碰含如下,输入输出还是用C的文件比较方便:
#include "stdio.h"
#include "string"
char fsm[8][128]
void initfsm()
{
const int line_len=sizeof(char)*128
memset(fsm[0],0,line_len)
memset(fsm[1],0,line_len)
memset(fsm[2],2,line_len)
memset(fsm[3],3,line_len)
memset(fsm[4],3,line_len)
memset(fsm[5],5,line_len)
memset(fsm[6],5,line_len)
memset(fsm[7],0,line_len)
fsm[0]['/']=1
fsm[0]['"']=5
fsm[1]['/']=2
fsm[1]['*']=3
fsm[1]['"']=5
fsm[2]['\n']=7
fsm[3]['*']=4
fsm[4]['/']=7
fsm[4]['*']=4
fsm[5]['"']=0
fsm[5]['\\']=6
fsm[7]['/']=1
fsm[7]['"']=5
}
int main()
{
int state=0
char c
std::string s
FILE *fin=fopen("e:\\in.txt","r")
FILE *fout=fopen("e:\\out.txt","w")
initfsm()
while(fscanf(fin,"%c",&c)!=EOF)
{
state=fsm[state][c]
s+=c
switch(state)
{
case 0:
fprintf(fout,"%s",s.c_str())
s=""
break
case 7:
s=""
if(c=='\n')
{
fputc(c,fout)
}
break
}
}
fclose(fin)
fclose(fout)
return 0
}
C语言读写文件 都是三个步骤
1.获取文件描述符
2.对文件读写
3.关闭文件
对文件读 *** 作
//获取文件指针FILE *pFile = fopen("1.txt","w") // 文件打开方式 如果原来有数梁弯内容也会销毁//向文件写数据
fwrite ("hello", //要输入的文字
1,//文字每一项的大小 以为这里是字符型的 就设置为1 如果是汉字就设置为4
strlog("hello"), //单元个数 渣氏我们也可以直接写5
pFile //我们刚刚获得到的地址
薯闷 )
//fclose(pFile) //告诉系统我们文件写完了数据更新,但是我们要要重新打开才能在写
fflush(pFile) //数据刷新 数据立即更新
对文件写 *** 作
FILE *pFile=fopen("1.txt","r") //获取文件的指针char *pBuf //定义文件指针
fseek(pFile,0,SEEK_END) //把指针移动到文件的结尾 ,获取文件长度
int len=ftell(pFile) //获取文件长度
pBuf=new char[len+1] //定义数组长度
rewind(pFile) //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
fread(pBuf,1,len,pFile) //读文件
pBuf[len]=0 //把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束
MessageBox(pBuf) //显示读到的数据
fclose(pFile) // 关闭文件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)