#define _CRT_SECURE_NO_WARNINGS // 新版本提示要用安全函数,此处添加宏_CRT_SECURE_NO_WARNINGS 屏蔽告警
#define MAX_LINE 1000
#include<bits/stdc++.h>
using namespace std;
int konGepanduan(char buf[],int len){ //空行判断
for(int i=0;i<len;i++){
if(buf[i]!=10&&buf[i]!=32){
// cout<<(int)buf[i]<<" "<<i;
return 0;
}
}
return 1;
}
int zhuShi(char buf[],int len){ //判断注释
for(int i=0;i<len-1;i++){
if(buf[i]=='/'&&buf[i+1]=='/'){
return 1;
}
}
return 0;
}
int zuoKH=0; //左括号
int hansu=0; //函数数量
bool bol=false;
int hanShuHS[100]; //统计每一个函数的大小
int hs1; //统计每一个多少行
void hanShu(char buf[],int len){
for(int i=0;i<len-1;i++){
if(buf[i]=='{'){
zuoKH++;
hs1++; //统计函数有多少行
bol=true;
}
if(buf[i]=='}'){
zuoKH--;
if(zuoKH==0&&bol==true){
hansu++;
hanShuHS[hansu]=hs1; //统计行数
bol=false;
}
}
}
}
int main()
{
char buf[MAX_LINE]; /*缓冲区*/
FILE* fp; /*文件指针*/
int len; /*行字符个数*/
string file;
cout<<"请输入文件的绝对路径:";
cin>>file;
if ((fp = fopen(file.c_str(), "r")) == NULL)
{
perror("fail to read");
exit(1);
}
int sum=0;
double konGe=0; //判断空格
double shuzhi=0;
while (fgets(buf, MAX_LINE, fp) != NULL)
{
len = strlen(buf);
printf("%s", buf);
if(konGepanduan(buf,len)==1){ //空格行判断
konGe++;
}
if(zhuShi(buf,len)==1){
shuzhi++;
cout<<"注释加加";
}
hanShu(buf,len); //执行计算函数有多少个
sum++; //行数加加
}
int tonJi;
for(int i=1;i<hansu;i++){ //平均函数统计
tonJi+=hanShuHS[i];
// cout<<hanShuHS[i]<<endl;
}
int pjs=tonJi/(hansu-1); //平均数
double zs=shuzhi/sum*100; //注释总比列
double kg=konGe/sum*100; //空格总比列
cout<<endl;
if(pjs>=10&&pjs<=15){
cout<<"代码(函数平均长度):A";
}else if(pjs>=8&&pjs<=9||pjs>=15&&pjs<=20){
cout<<"代码(函数平均长度):B" ;
}else if(pjs>=5&&pjs<=7||pjs>=21&&pjs<=24){
cout<<"代码(函数平均长度):C";
}else if(pjs<5||pjs>24){
cout<<"代码(函数平均长度):D";
}
cout<<endl;
if(shuzhi>=15&&zs<=25.0){
cout<<"注释(总比例):A";
}else if(shuzhi>10&&shuzhi<14||zs<26.0&&zs<30.0){
cout<<"注释(总比例):B";
}else if(shuzhi>5&&shuzhi<9||zs<31.0&&zs<35.0){
cout<<"注释(总比例):C";
}
else if(zs<5.0||zs<35.0){
cout<<"注释(总比例):D";
}
cout<<endl;
if(konGe>=15&&zs<=25.0){
cout<<"空格(总比例):A";
}else if(konGe>10&&konGe<14||kg<26.0&&kg<30.0){
cout<<"空格(总比例):B";
}else if(konGe>5&&konGe<9||kg<31.0&&kg<35.0){
cout<<"空格(总比例):C";
}
else if(kg<5.0||kg<35.0){
cout<<"空格(总比例):D";
}
cout<<endl;
cout<<endl<<"函数个数:"<<hansu-1<<" 函数平均行数:"<<pjs<<" 注释:"<<shuzhi<<" 空行:"<<konGe<<" 代码行数:"<<sum;
// cout<<endl<<zs<<" "<<kg;
return 0;
}
C文件的"函数个数:函数平均行数: 注释 空行:代码行数判断