编译原理第一次作业.docx

上传人:b****6 文档编号:8489351 上传时间:2023-01-31 格式:DOCX 页数:11 大小:193.53KB
下载 相关 举报
编译原理第一次作业.docx_第1页
第1页 / 共11页
编译原理第一次作业.docx_第2页
第2页 / 共11页
编译原理第一次作业.docx_第3页
第3页 / 共11页
编译原理第一次作业.docx_第4页
第4页 / 共11页
编译原理第一次作业.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

编译原理第一次作业.docx

《编译原理第一次作业.docx》由会员分享,可在线阅读,更多相关《编译原理第一次作业.docx(11页珍藏版)》请在冰豆网上搜索。

编译原理第一次作业.docx

编译原理第一次作业

《编译原理》课程实验报告

实验地点

实验时间

实验名称:

第一次使实验

实验目的:

重温C语言程序设计,重温程序设计从编辑、编译到连接的全过程,理解编译器的重要性。

实验要求(详见实验讲义与实验指导书):

1)键盘输入任意字符串,统计其中数字、字母的个数并输出到终端。

输入:

字符串

输出:

(数字,SUMD);(字母,SUML)

其中SUMD和SUML分别为统计出的数字和字母的个数。

2)查找给定文件中的C语言注释行,并输出其内容。

输入:

文本文件“test.txt”

输出:

文件中C语言注释行的内容(注:

结果同时输出到文件)

提示:

注释行以“/**/”或“//”标示

 

实验内容及关键步骤(算法描述(流程图或伪代码)、代码)

1.1、算法描述

(1)输入一个字符串

(2)使用for循环检测每个字符,判断是否为字母或数字,判断的条件:

字母:

if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z'){

字母数量++;

}

数字:

if(str[i]>='0'&&str[i]<='9'){

数字数量++;

}

(3)输出最后结果

1.2、流程图描述

 

2.1、算法描述

(1)读取的模式打开一个txt的一个文件,逐行读入文件的内容

(2)检测每行中的每个字符,判断是否为//注释行或为/**/注释行

(3)判断条件

//注释行:

if(buffer[i]=='/'&&buffer[i+1]=='/'&&op==false){//当前的字符为’/‘,下个字符为‘/’

直接输出注释行内容

跳出当行的字符循环

}

/**/注释行

if(op==true){

该字符是/**/内的字符,

将该字符保存到pstr的字符串中

}

if(buffer[i]=='/'&&buffer[i+1]=='*'){

以下是/**/注释行的内容

memcpy(pstr,p+i,1);//拷贝当前字符

op=true;//设置注释行的类型,当前为/**/的类型

}

if(buffer[i]=='*'&&buffer[i+1]=='/'&&op==true){

检测到注释行的内容结束

memcpy(pstr,p+i+1,1);//拷贝当前字符

continue;

}

(4)输出结果

2.2、算法流程图

统计数字和字母数量的结果截图:

实验过程中遇到的问题解决办法与实验体会

在这次的实验中基本没遇到什么问题,只是c语言有点不熟练了

**************************源代码*******************************

#include"iostream"

#include"string"

usingnamespacestd;

intmain()

{

while

(1){

charstr[100];

cin>>str;

intk=0;

intj=0;

for(inti=0;i

if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z'){

j++;

}

if(str[i]>='0'&&str[i]<='9'){

k++;

}

}

cout<<"数字:

"<

cout<<"字母:

"<

}

return0;

}

 

#include"iostream"

#include"string"

#include"fstream"

usingnamespacestd;

intmain()

{

charbuffer[256];

boolop=false;//判断是否为/**/的注释

char*pstr=NULL;//记录注释内容

pstr=(char*)malloc(1024*sizeof(char));

char*ptempstr=NULL;//记录pstr的首地址

ptempstr=(char*)malloc(1024*sizeof(char));

ptempstr=pstr;

ifstreamfileopen;

fileopen.open("d:

\\com.txt");

cout<<"文件内容如下:

"<

while(!

fileopen.eof()){

fileopen.getline(buffer,256,'\n');//读入一行到控制台

char*p;//指向读取文件的buffer缓冲区的首地址

p=buffer;

for(inti=0;i

//遇到“//”的注释

if(buffer[i]=='/'&&buffer[i+1]=='/'&&op==false){

memset(pstr,0,1024);

memcpy(pstr,p+i,strlen(buffer)-i);

cout<

break;

}

/**///**/

//遇到“/**/”的注释

if(op==true){

memcpy(pstr,p+i,1);//拷贝当前字符

pstr+=1;

}

if(buffer[i]=='/'&&buffer[i+1]=='*'){

memset(pstr,0,1024);

ptempstr=pstr;

memcpy(pstr,p+i,1);//拷贝当前字符

pstr+=1;

op=true;

}

if(buffer[i]=='*'&&buffer[i+1]=='/'&&op==true){

memcpy(pstr,p+i+1,1);//拷贝当前字符

pstr+=1;

cout<

op=false;

i++;

continue;

}

}

}

fileopen.close();

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1