代码计算神器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码计算神器相关的知识,希望对你有一定的参考价值。

  • 程序功能:精确计算一个文件夹中的所有子文件夹中的指定类型代码的行数,人为的换行都会被自动忽略不计.
  • 操作方法:用X-Code编译完成将可执行文件拖到桌面上双击打开后根据提示操作.
  • 代码如下:
      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 //计算代码行数
      5 int countAmount(char a[])
      6 {
      7     int i,sum = 0;
      8     
      9     for(i = 0; a[i]; i++)
     10     {
     11 
     12         int flag = 0;
     13         //查找这个回车符与上一个回车符之间是否存在内容
     14         if (a[i] == 10) {
     15             
     16             for(int j = i - 1; j > 0 && a[j] != 10; j--) {
     17                 
     18                 if (a[j] !=   && a[j] !=  13) {
     19                     flag = 1;
     20                     break;
     21                 }
     22             }
     23         }
     24         if (flag) {
     25             sum++;
     26         }
     27     }
     28     //如果最后一行没有换行则加1
     29     if (a[i-1] != 10) {
     30         sum++;
     31     }
     32     return sum;
     33 }
     34 int main()
     35 {
     36     /**要执行的find命令*/
     37     char command[5000];
     38     /**需要合并代码的文件夹路径*/
     39     char folderPath[5000];
     40     /**文件后缀名*/
     41     char suffix[20];
     42     /**存放所有搜索到的文件路径的临时文件,在这个文件中每个路径单独占一行,最后这个文件会被删除*/
     43     char tempFile[5000];
     44     /**临时文件的指针*/
     45     FILE *fTempFile;
     46     /**单个文件路径*/
     47     char singleFile[5000];
     48     /**单个文件的指针*/
     49     FILE *fSingleFile;
     50     /**存放单个文件中的所有内容*/
     51     char singleFileContent[1000000];
     52     /**单个文件代码数量*/
     53     int singleFileAmount;
     54     /**所有文件代码总量*/
     55     int allFileAmount;
     56     /**文件的数量*/
     57     int fileNum;
     58     char ch,ch2;
     59     int i,flag;
     60     while(1)
     61     {
     62         printf("请拖入文件夹路径:");
     63         scanf("%s",folderPath);
     64         printf("请输入要合并文件的后缀(如.c,.txt):");
     65         scanf("%s",suffix);
     66         //生成不完整的find命令
     67         strcpy(command,"find ");
     68         strcat(command,folderPath);
     69         strcat(command," -name *");
     70         strcat(command,suffix);
     71         strcat(command,">>");
     72         //生成临时文件的全路径
     73         strcpy(tempFile,folderPath);
     74         strcat(tempFile,"/temp.txt");
     75         //生成完整的find命令
     76         strcat(command,tempFile);
     77         //执行Unix下的find命令,将搜索到的内容输出到temp.txt文件中
     78         system(command);
     79         fTempFile = fopen(tempFile,"r");
     80         fileNum = 0;
     81         allFileAmount = 0;
     82         while(1)
     83         {
     84             i=-1;
     85             //每次得到一个文件的全路径
     86             while((singleFile[++i]=fgetc(fTempFile))!=10&&singleFile[i]!=EOF);
     87             
     88             if(singleFile[i]==EOF)
     89             {
     90                 break;
     91             }
     92             singleFile[i]=0;//文件内容结尾标志
     93             singleFileAmount = 0;
     94             ch2 = 0;
     95             fSingleFile=fopen(singleFile,"r");//打开文件
     96             i=0;
     97             while((ch=fgetc(fSingleFile))!=EOF)
     98             {
     99                 singleFileContent[i++] = ch;
    100             }
    101             singleFileContent[i] = 0;
    102             singleFileAmount = countAmount(singleFileContent);
    103             fileNum++;
    104             printf("%d:%d行 %s\\n",fileNum,singleFileAmount,singleFile);
    105             allFileAmount += singleFileAmount;
    106             fclose(fSingleFile);
    107         }
    108         fclose(fTempFile);
    109         //生成删除临时文件的命令
    110         strcpy(singleFile,"rm ");
    111         strcat(singleFile,tempFile);
    112         system(singleFile);//删除临时文件
    113         printf("\\n\\n此文件夹下:\\n\\n");
    114         printf("共计%d个.c文件\\n\\n",fileNum);
    115         printf("共计代码:%d行\\n\\n",allFileAmount);
    116 
    117         
    118     }
    119     return 0;
    120 }

    结果:

    技术分享

     

以上是关于代码计算神器的主要内容,如果未能解决你的问题,请参考以下文章

代码计算神器

火爆 GitHub!这个 AI 神器究竟有什么魅力?

Python之深入解析一行代码计算每个省面积的神器Geopandas

炸了!又一 VSCode 神器面世(AI 能自动编程了??)

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

将vscode打造成无敌的IDE打造shell IDE--三大神器