综合实践报告(7)C程序源码操作(内附五套代码)

特别说明:提供的五套代码均已提交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 文件中,并在屏幕上显示处理过的程序,显示时加上行号。

C++主要代码(string类型 片段匹配)
#include 
#include 
#include 
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; i1)
        cout<<"有不止一个main函数"<>sta>>en;
    d=0;
    for(i=0;i=sta&&d<=en)   //符合在区间之内的
            {
                cout<<"//";
                fprintf(fp,"//");
            }
        puts(s[i]);
        fputs(s[i],fp);
        fprintf(fp,"\n");
    }
    fclose(fp);
}
C主要代码(未用KMP匹配,普通匹配)
#include 
#include 
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=sta&&d<=en)
        {
            printf("//");
            fprintf(fp,"//");
        }
        puts(s[i]);
        fputs(s[i],fp);
        fprintf(fp,"\n");
    }
    fclose(fp);
}
C++代码 string类型find的应用
#include 
#include 
#include 
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>sta>>en;
    int d=0;
    for(i=0; i=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
C代码KMP匹配+子函数模块化思想
#include 
#include 
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=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 
#include 
#include
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=sta&&d<=en)
        {
            printf("//");
            fprintf(fp,"//");
        }
        puts(s[i]);
        fputs(s[i],fp);
        fprintf(fp,"\n");
    }
    fclose(fp);
}
int main()
{
    input();
    BFmain();
    chuli();
}


 
   



你可能感兴趣的:(综合实践报告(7)C程序源码操作(内附五套代码))