综合实践报告(7)C程序源码操作(内附五套代码)
来源:互联网 发布:先锋网络电视 编辑:程序博客网 时间:2024/06/07 21:13
特别说明:提供的五套代码均已提交ytuoj,再提交 绝对为100%重复,此代码用于交流探讨,借鉴需有度
用 C 语言写的源程序是一种文本文件。本项目以 C 语言的源程序为操作对象,完成对源程序的一系列处理,如判断是否有 main 函数、将某些行加上注释等。各功能可以分别编制一个程序实现(建议用这种简单的方案),也可以编制一个程序文件,各功能作为程序中的模块。
(1)读入一个 C 程序,判断其中是否只有一个 main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,或者“不能定义多个 main()函数”。
提示 1:简单处理,可以只比较判断“main()”,考虑实际上的各种可能,main 后面的括号中有任意多个空格及 void 的都应该算在内。建议按最简单的情形处理。
提示 2:建议设计一个函数 is_sub_sring(char *s1, char* s2),函数用于判断 s1 是否“包含”在读入的一行 s2 中。调用时,用“main()”与读到的代码与字符串进行比较,形参 s1 对应的实参用“main()”即可。这样写提升了“抽象”级别,更容易实现,对应更高的代码质量。
(2)读入一个 C 语言程序,使程序中的所有左花括号“{”和右花括号“}”都单独占一行,修改的程序保存到另一个.c 文件中,并在屏幕上显示处理过的程序,显示时加上行号。
(3)读入一个 C 语言程序,输入 m、n 两个数字,从第 m 行起的 n 行代码将作为注释使用(即在这些行前面加上“//”),修改的程序保存到另一个.c 文件中,并在屏幕上显示处理过的程序,显示时加上行号。
(1)读入一个 C 程序,判断其中是否只有一个 main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,或者“不能定义多个 main()函数”。
提示 1:简单处理,可以只比较判断“main()”,考虑实际上的各种可能,main 后面的括号中有任意多个空格及 void 的都应该算在内。建议按最简单的情形处理。
提示 2:建议设计一个函数 is_sub_sring(char *s1, char* s2),函数用于判断 s1 是否“包含”在读入的一行 s2 中。调用时,用“main()”与读到的代码与字符串进行比较,形参 s1 对应的实参用“main()”即可。这样写提升了“抽象”级别,更容易实现,对应更高的代码质量。
(2)读入一个 C 语言程序,使程序中的所有左花括号“{”和右花括号“}”都单独占一行,修改的程序保存到另一个.c 文件中,并在屏幕上显示处理过的程序,显示时加上行号。
(3)读入一个 C 语言程序,输入 m、n 两个数字,从第 m 行起的 n 行代码将作为注释使用(即在这些行前面加上“//”),修改的程序保存到另一个.c 文件中,并在屏幕上显示处理过的程序,显示时加上行号。
C++主要代码(string类型 片段匹配)
#include <iostream>#include <cstring>#include <cstdio>using namespace std;char str[9999]; // str 删除多余空格后的int cint[25],cmain[25],cmi=0; // int字段的记录,main()字段的统计,int main()相匹配的字段char s[99][99],a[999][99];// s输入的原始数据 ,a按空格临时储存的数据string strl[99]; //string 类型依空格为界储存数据int Findint(string a[],int n) //找出 所有的 int ,返回找到了k个{ int i,k=0; string strint="int"; for(i=0; i<n; i++) { if(a[i]==strint) cint[k++]=i; } return k;}int Findmain(string a[],int n) //找出 所有的 main() {,返回找到了几个{ int i,k=0; string aa="main()",b="main(",c=")",d="main",e="("; for(i=0; i<n; i++) { if(a[i]==aa||(a[i]==b&&a[i+1]==c)||(a[i]==d&&a[i+1]==e&&a[i+2]==c)) cmain[k++]=i; //所有可能的 main后括号的情况 } return k;}int main(){ int i=0; while(gets(s[i++])){} int j=0,m,n=i-1,k=0,p=0,q; //n记录原始输入多少行代码 for(i=0; i<n; i++) //把输入代码 储存在一行代码里 { for(k=0; k<strlen(s[i]); k++) str[j++]=s[i][k]; str[j++]=' '; } j=0; k=0; for(i=0; i<strlen(str); i++) //把长串 按空格转化成j个string类型临时储存 { if(str[i]!=' ') a[j][k++]=str[i]; if(str[i]==' ') { strl[j]=string(a[j]); j++; k=0; if(str[i+1]==' ') j--; } } m=j; //记录 string类型的一共有m个 p=Findint(strl,m); q=Findmain(strl,m); for(i=0; i<q; i++) //匹配是否有合适的 int main()返回 { // 即int 和main 序列 是差一的 for(j=0; j<p; j++) { if(cint[j]==(cmain[i]-1)) cmi++; } } if(cmi==1) cout<<"有一个main函数"<<endl; else if(cmi==0) cout<<"暂时没发现main"<<endl; else if(cmi>1) cout<<"有不止一个main函数"<<endl; cout<<endl<<endl<<"格式化括号:"<<endl<<endl; FILE *fp; fp=fopen("1.c","w"); //打开文件1.c int d=0; for(i=0;i<n;i++) { cout<<d+1<<". "; for(j=0;j<strlen(s[i]);j++) { if((s[i][j]=='{'||s[i][j]=='}')&&j!=0) { //未单独成行的花括号让其单独成行 d++; //分别在屏幕,文件显示 fprintf(fp,"\n"); cout<<endl<<d+1<<". "; } cout<<s[i][j]; fprintf(fp,"%c",s[i][j]); } d++; fprintf(fp,"\n"); cout<<endl; } fclose(fp); //关闭上个操作的文件指针 fp=fopen("2.c","w"); int sta,en; //注释起的起始行 sta en cout<<endl<<"请输入要注释起的行 开始+结束"<<endl; cin>>sta>>en; d=0; for(i=0;i<n;i++) { d++; cout<<d<<". "; if(d>=sta&&d<=en) //符合在区间之内的 { cout<<"//"; fprintf(fp,"//"); } puts(s[i]); fputs(s[i],fp); fprintf(fp,"\n"); } fclose(fp);}C主要代码(未用KMP匹配,普通匹配)
#include <string.h>#include <stdio.h>char str[9999]; // str 删除多余空格后的int cmain; // 查找到的main的个数char s[99][99];// s[i]输入的原始数据void findmain() //查找函数中共出现了几次main(){ cmain=0; char s[7]= {"main()"}; int j; for(int i=0; i<strlen(str); i++) { if(str[i]=='m') { for(j=1; j<6; j++) { i++; if(str[i]!=s[j]) { i=i+j+1; break; } } if(j==6) cmain++; } }}int main(){ int i=0; while(gets(s[i++])) {} //分行输入 int j=0,m,n=i-1,k=0,p=0,q; for(i=0; i<n; i++) //把输入代码 储存在一行代码里 { for(k=0; k<strlen(s[i]); k++) str[j++]=s[i][k]; str[j++]=' '; } findmain(); if(cmain==0) printf("暂时没发现main函数\n"); else if(cmain==1) printf("有一个main函数\n"); else printf("不只有一个main函数\n\n"); printf("###格式化花括号操作###\n\n"); FILE *fp; fp=fopen("7.1.c","w"); //打开文件1.c int d=0; for(i=0; i<n; i++) { printf("%d. ",d+1); for(j=0; j<strlen(s[i]); j++) { if((s[i][j]=='{'||s[i][j]=='}')&&j!=0) { d++; fprintf(fp,"\n"); printf("\n%d. ",d+1); } printf("%c",s[i][j]); fprintf(fp,"%c",s[i][j]); } d++; fprintf(fp,"\n"); printf("\n"); } fclose(fp); //关闭上个操作的文件指针 printf("###批量注释操作###\n\n"); fp=fopen("7.2.c","w"); int sta,en; //注释起的起始行 sta en printf("请输入要注释起的行 开始+结束\n\n"); scanf("%d%d",&sta,&en); d=0; for(i=0; i<n; i++) { d++; printf("%d. ",d); if(d>=sta&&d<=en) { printf("//"); fprintf(fp,"//"); } puts(s[i]); fputs(s[i],fp); fprintf(fp,"\n"); } fclose(fp);}C++代码 string类型find的应用
<span style="font-size:18px;">#include <iostream>#include <cstring>#include <cstdio>using namespace std;char str[9999]; // str 删除多余空格后的int fmian=0;// 记录查找情况char s[99][99];// s输入的原始数据 ,a按空格临时储存的数据string strl; //临时性string类型int i,j=0,m,n,k=0,p=0,q;FILE *fp;void Findmain(){ //用串string自带的find函数查询 string s="main()"; int m=strl.find(s); //正向查询 int n=strl.rfind(s); //反向查询 if(!(m>0&&m<strlen(str))) //没找到情况 cout<<"没有main函数"<<endl; else if(m==n) cout<<"有一个main函数"<<endl; //找到相同时会 else if(m!=n) cout<<"有多个main函数"<<endl;}void step1(){ cout<<"***格式化花括号操作***"<<endl<<endl; fp=fopen("7.1.cpp","w"); //打开文件1.c int d=0; for(i=0; i<n; i++) { cout<<d+1<<". "; for(j=0; j<strlen(s[i]); j++) { if((s[i][j]=='{'||s[i][j]=='}')&&j!=0) { d++; fprintf(fp,"\n"); cout<<endl<<d+1<<". "; } cout<<s[i][j]; fprintf(fp,"%c",s[i][j]); } d++; fprintf(fp,"\n"); cout<<endl; } fclose(fp); //关闭上个操作的文件指针}void step2(){ cout<<"***批量注释操作***"<<endl<<endl; fp=fopen("7.2.cpp","w"); int sta,en; //注释起的起始行 sta en cout<<endl<<"亲输入要注释起的行 开始+结束"<<endl; cin>>sta>>en; int d=0; for(i=0; i<n; i++) { d++; cout<<d<<". "; if(d>=sta&&d<=en) { cout<<"//"; fprintf(fp,"//"); } puts(s[i]); fputs(s[i],fp); fprintf(fp,"\n"); } fclose(fp);}int main(){ int i=0; while(gets(s[i++])) {} j=0; n=i-1; for(i=0; i<n; i++) //把输入代码 储存在一行代码里 { for(k=0; k<strlen(s[i]); k++) str[j++]=s[i][k]; str[j++]=' '; } strl=string(str); Findmain(); step1(); step2();}</span><span style="color:#000099;font-size:24px;"></span>C代码KMP匹配+子函数模块化思想
<pre name="code" class="cpp">#include <string.h>#include <stdio.h>char str[9999];int cmain,n;char s[99][99];void input(){ int i=0,k,j=0; while(gets(s[i++])) {} n=i-1; for(i=0; i<n; i++) //把输入代码 储存在一行代码里 { for(k=0; k<strlen(s[i]); k++) str[j++]=s[i][k]; str[j++]=' '; }}void KMPmain() //查找函数中共出现了几次main(){ cmain=0; int i=0,j=-1,next[7]; next[0]=-1; char s[7]= {"main()"}; while(i<6) { if(j=-1||s[i]==s[j]) { i++;j++; next[i]=j; } else j=next[j]; } i=0;j=0; while(i<strlen(str)&&j<6) { if(j==-1||str[i]==s[j]) { i++;j++; } else j=next[j]; } if(j==6) printf("找到一个main函数\n"); else printf("没找到main函数\n");}void S1(){ FILE *fp; printf("格式化花括号操作:\n\n"); fp=fopen("7.1.c","w"); //打开文件1.c int i,j,d=0; for(i=0; i<n; i++) { printf("%d. ",d+1); for(j=0; j<strlen(s[i]); j++) { if((s[i][j]=='{'||s[i][j]=='}')&&j!=0) { d++; fprintf(fp,"\n"); printf("\n%d. ",d+1); } printf("%c",s[i][j]); fprintf(fp,"%c",s[i][j]); } d++; fprintf(fp,"\n"); printf("\n"); } fclose(fp); //关闭上个操作的文件指针}void S2(){ int i,j,d=0; FILE *fp; printf("###批量注释操作###\n\n"); fp=fopen("7.2.c","w"); int sta,en; //注释起的起始行 sta en printf("请输入要注释起的行 开始+结束\n\n"); scanf("%d%d",&sta,&en); d=0; for(i=0; i<n; i++) { d++; printf("%d. ",d); if(d>=sta&&d<=en) { printf("//"); fprintf(fp,"//"); } puts(s[i]); fputs(s[i],fp); fprintf(fp,"\n"); } fclose(fp);}int main(){ input(); KMPmain(); S1(); S2();}文件输入
#include <string.h>#include <stdio.h>#include<stdlib.h>char str[9999];int cmain,n;char s[99][99];FILE *fp;void input(){ int i=0,j,k; if((fp=fopen("源代码.c","r"))==NULL) { printf("源代码文件不存在\n"); exit(0); } while(!feof(fp)) { str[i++]=fgetc(fp); } i=0,k=0; for(j=0; j<strlen(str); j++) { if(str[j]=='\n') { i++; k=0; } else s[i][k++]=str[j]; } n=i;}void BFmain(){ cmain=0; char s[7]= {"main()"}; int j; for(int i=0; i<strlen(str); i++) { if(str[i]=='m') { for(j=1; j<6; j++) { i++; if(str[i]!=s[j]) { i=i+j+1; break; } } if(j==6) cmain++; } } if(cmain==0) printf("暂时没发现main函数\n"); else if(cmain==1) printf("有一个main函数\n"); else printf("不只有一个main函数\n\n");}void chuli(){ printf("格式化花括号操作:\n\n"); fp=fopen("7.1.c","w"); //打开文件1.c int i,j,d=0; for(i=0; i<n; i++) { printf("%d. ",d+1); for(j=0; j<strlen(s[i]); j++) { if((s[i][j]=='{'||s[i][j]=='}')&&j!=0) { d++; fprintf(fp,"\n"); printf("\n%d. ",d+1); } printf("%c",s[i][j]); fprintf(fp,"%c",s[i][j]); } d++; fprintf(fp,"\n"); printf("\n"); } fclose(fp); //关闭上个操作的文件指针 printf("###批量注释操作###\n\n"); fp=fopen("7.2.c","w"); int sta,en; //注释起的起始行 sta en printf("请输入要注释起的行 开始+结束\n\n"); scanf("%d%d",&sta,&en); d=0; for(i=0; i<n; i++) { d++; printf("%d. ",d); if(d>=sta&&d<=en) { printf("//"); fprintf(fp,"//"); } puts(s[i]); fputs(s[i],fp); fprintf(fp,"\n"); } fclose(fp);}int main(){ input(); BFmain(); chuli();}
2 0
- 综合实践报告(7)C程序源码操作(内附五套代码)
- C语言综合实践-----C程序操作
- 综合实践报告(6)--2 投票系统
- 软件工程(C编码实践篇) 第二次作业实验报告
- 软件工程(C编码实践篇) 第三次作业实验报告
- C语言综合实践7.18
- C程序实践 哈夫曼(Huffman)树代码
- 使用C/C++实现Socket聊天程序(代码+实验报告)
- 模糊综合评判+C代码
- (源码)Android综合案例(经典)
- Config程序配置文件操作实践及代码详注
- C++ Primer 学习笔记_38_STL实践与分析(12)--容器的综合应用:文本查询程序
- C语言综合实践-----银行储蓄系统
- Vs2010程序打包详细操作(经实践验证)
- Servlet第一个程序--实践操作(命令行)
- [综合] C#Winform程序如何发布并自动升级(图解)
- 综合项目之闪讯破解(六)之 如何解决程序/C++Dll的兼容性问题
- 链队列的综合操作(详解、演示)C语言实现
- 华为网络通信基一
- 【机器学习】MATLAB读取mnist数据库
- Codeforces Round #347 (Div. 2) D. Graph Coloring(最少需要选择多少个点,使得所有边的颜色相同)
- zoj3939 The Lucky Week 模拟
- Linux is not Matrix——redis集群搭建
- 综合实践报告(7)C程序源码操作(内附五套代码)
- pixhawk ArduPilot_main启动与运行分析
- 前端开发面试知识点大纲:
- AOP面向方面编程
- Eclipse关联ndk-build(自建Builder方法)
- unity3d之新手引导遮黑
- MyEclipse部署网站出现java.lang.OutOfMemoryError: PermGen space
- listview中数据如果要实时读写,需要每次操作后都要查询数据库吗
- C# 基本知识纪录