判断代码中main()的个数

本文转载自http://blog.csdn.net/sxhelijian/article/details/9094921

  (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;

//计算代码中main()函数的个数
int appear(char*s1,char*s2);

int main( )
{
    char line[256];//保存source.cpp中的一行代码
    char main_fun[8]="main()";//需要判断的main(0函数
    int main_num=0;//保存代码中存在的main()函数的个数

    //将文件中的数据读入到字符数组中
    ifstream sourceFile("source.cpp",ios::in);//以输入的方式打开文件
    
    if(!sourceFile)//测试是否成功打开
    {
        cerr<<"source code read error!"<<endl;
       exit(1);//退出程序
    }

    //当文件读取结束时退出循环
    while(!sourceFile.eof())
    {
        //每循环一次读取一行字符到字符数组line中以\n结束
        sourceFile.getline(line,255,'\n');
    
        //得到代码中main()函数的个数
        main_num += appear(line,main_fun);
        
        if(main_num>1)  //多于1个,没有必要再去读取
        {
            break;
        }
    }

    
    sourceFile.close();//关闭文件

    //识别结论
    if(main_num==0)
    {
        cout<<"代码中没有main()函数";
    }
    else if (main_num==1)
    {
        cout<<"代码中存在一个main()函数";
    }
    else
    {
        cout<<"代码中存在多个main()函数";
    }
    
    cout<<endl;

    system("pause");
}

//返回s2在s1中出现了几次
int appear(char*s1, char*s2)
{
    int n=0;
    int flag;
    char *p,*q;
    
    for(; *s1!='\0'; s1++)
    {
        if(*s2 == *s1) //判断两个字符串中的第一个字符是否相同
        {
            flag=1;//当两个字符串中的第一个字符是否相同时,flag标记为1

            p=s1;//p为字符串s1中第一个字符的地址
            q=s2;//q为字符串s2中第一个字符的地址
           
            for(; *q!='\0';) /*如果有则判断接下去的几个字符是否相同*/
            {
                if (*q++ != *p++)//当字符不相等时
                {
                    flag=0;//标记为0
                    break;//退出循环
                }
            }

            if (flag==1)//当代码中存在"main()"时执行n++
            {
                n++;//n表示代码中"main()"的个数
            }
        }

    }

    return n;
}


测试程序

在测试前先创建一个source.cpp文件,并且将source.txt文件放到工程目录下


当source.cpp文件的代码中没有"main()"函数

source.cpp中的代码

#include <iostream>  
using namespace std;  
const double x1=0.3, x2=0.8; //式子中出现的两个常数定义为全局常变量,方便,易维护  

double f(double); //先声明  

int 
{   double x;   cout<<"请输入x的值:";  
 cin>>x;  
 cout<<"解得: "<<f(x)<<"\n";    //调用函数  
return 0;  
}  

double f(double x)  
{     int a;  
    if(x<x1){  
        a=0;  
    }    else if(x<=x2){
        a=(x-x1)/(x2-x1);  
    }    else{  
        a=1;  
    }  
    return a;       //返回值  
}


测试结果


当source.cpp文件的代码中有一个"main()"函数时

source.cpp文件中的代码

#include <iostream>  
using namespace std;  
const double x1=0.3, x2=0.8; //式子中出现的两个常数定义为全局常变量,方便,易维护  

double f(double); //先声明  

int main()
{   double x;   cout<<"请输入x的值:";  
 cin>>x;  
 cout<<"解得: "<<f(x)<<"\n";    //调用函数  
return 0;  
}  

double f(double x)  
{     int a;  
    if(x<x1){  
        a=0;  
    }    else if(x<=x2){
        a=(x-x1)/(x2-x1);  
    }    else{  
        a=1;  
    }  
    return a;       //返回值  
}


测试结果


当source.cpp文件的代码中有多个"main()"函数时(两个或两个以上main()函数)

source.cpp文件中的代码

#include <iostream>  
using namespace std;  
const double x1=0.3, x2=0.8; //式子中出现的两个常数定义为全局常变量,方便,易维护  

double f(double); //先声明  

int main()
int main()
{   double x;   cout<<"请输入x的值:";  
 cin>>x;  
 cout<<"解得: "<<f(x)<<"\n";    //调用函数  
return 0;  
}  

double f(double x)  
{     int a;  
    if(x<x1){  
        a=0;  
    }    else if(x<=x2){
        a=(x-x1)/(x2-x1);  
    }    else{  
        a=1;  
    }  
    return a;       //返回值  
}

测试结果



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值