C++第16周项目4 -处理C++源代码 - (1)有没有main函数?

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9078413

【项目4】写处理C++源代码的程序
   (1)读入一个C++程序,判断其中是否只有一个main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,或者“不能定义多个main()函数”;
   提示1:简单处理,可以只比较判断”main()”,考虑实际上的各种可能,main后面的括号中有任意多个空格及void的都应该算在内。建议按最简单的情形处理。
   提示2:不出意外,很多同学将试图直接将读到的代码与字符串”main()”直接比较,建议做成一个函数,判断s1是否在读入的一行s2中,调用时,形参s1处的实参用”main()”即可,这样写提升了“抽象”级别,更容易实现,对应更高的代码质量。

#include <fstream>
#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
int appear(char*s1,char*s2);
int main( )
{
    char line[256];
    char main_fun[8]="main()";
    int main_num=0;//初时,尚未发现

    //将文件中的数据读入到字符数组中
    ifstream sourceFile("source.cpp",ios::in);  //以输入的方式打开文件
    if(!sourceFile)       //测试是否成功打开
    {
        cerr<<"source code read error!"<<endl;
        exit(1);
    }
    while(!sourceFile.eof())
    {
        sourceFile.getline(line,255,'\n');
        main_num+=appear(line,main_fun);
        if (main_num>1)  //多于1个,没有必要再去读取
            break;
    }
    sourceFile.close();

    //识别结论
    if(main_num==0)
        cout<<"error: no main().";
    else if (main_num==1)
        cout<<"right: a main() be exist.";
    else
        cout<<"error: more than one main().";
    cout<<endl;
    return 0;
}

//返回s2在s1中出现了几次
int appear(char*s1,char*s2)
{
    int n=0,flag;
    char *p,*q;
    for(; *s1!='\0'; s1++)
    {
        if (*s2==*s1) /*判断字符串中是否有和要判断的字串首字符相同的字符*/
        {
            flag=1;
            p=s1 ; /*s1 p 为第一个相同字符的地址*/
            q=s2;
            for(; *q!='\0';) /*如果有则判断接下去的几个字符是否相同*/
            {
                if (*q++!=*p++)
                {
                    flag=0;
                    break;
                }
            }
            if (flag==1) n++;
        }

    }
    return(n);
}
时间: 2025-01-24 03:33:20

C++第16周项目4 -处理C++源代码 - (1)有没有main函数?的相关文章

C++第16周项目4 -处理C++源代码 - (3)自动加注释

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9078413 [项目4]写处理C++源代码的程序 (3)读入一个C++程序,输入m.n两个数字,从第m行起的n行代码将作为注释使用(即在这些行前面加上"//"),新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序,显示时加上行号. 参考解答:

C++第16周项目4 -处理C++源代码 - (2)花括号单独占一行

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9078413 [项目4]写处理C++源代码的程序 (2)读入一个C++程序,使程序中的所有左花括号"{"和右花括号"}"都单独占一行,新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序,显示时加上行号. 参考解答: #in

2013-C++第16周项目参考解答链接集

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目2-指来指去]设计一个程序,利用指针完成下面的工作(1)下面的程序,输入10 100和100 10,均可以输出max=100 min=10,请补充完整程序 #include <iostream> using namespace std; int main( ) { int *p1,*p2,a,b,t; cin>>a>>b; p1=&

2014秋C++第16周 项目 指针和数组、函数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-数组的排序]按给定部分程序的要求,用指向数组的指针变量作为形式参数编写函数,完成排序.重点体会:(1)排序算法,可以是冒泡,也可以是选择:(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变:(3)形

2014秋C++第16周 项目1参考 数组的排序

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-数组的排序]按给定部分程序的要求,用指向数组的指针变量作为形式参数编写函数,完成排序.重点体会:(1)排序算法,可以是冒泡,也可以是选择:(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变:(3)形

C++第16周项目2——带姓名的成绩单(字符数组版)

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2-带姓名的成绩单(字符数组版)](参考15周项目3)设score数组中存储同学们的C++成绩,增加一个数组char name[][20]并赋初值,表示同学们的姓名(注意:本周不使用更方便的string类).这两个数组中,同学的姓名与成绩的下标保持一致(例如name[1]和score[1]表示同一位同学的姓名和C++成绩).请(1)输出按成绩排序后的同学的名单:(2

2014秋C++第16周 项目2参考 用指针玩字符串

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目2-用指针玩字符串] 指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[]:指向字符型的指针char *p2,可以操作字符数组(字符串)char str[]:更灵活的是,在函数的传递中,指针.数组名在一定程度上可以互换.请编制函数,对字符串的进行各种操作. 序 功

2013级C++第16周项目——初识指针

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 第一部分 程序分析 阅读下面的程序,先写出其运行结果,再运行对比. 读不懂怎么办?支招1:按课堂上老师讲课的方式,将变量对应内存的"框子"画出来,用大脑当CPU,写出变量的变化过程:支招2:单步执行程序,在监视(watch)窗口中观察变量的动态变化,从而掌握程序的运行机理.(1) #include <iostream> using namespace

C++第16周项目5——填空学指针

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目5-填空学指针]采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出.请补充完整下面的程序. #include <iostream> using namespace std; const int N=8; int main() { int a[N],*p,*q; for(p=a; p<a+N; p++) ___(1)___; p=a