zoukankan      html  css  js  c++  java
  • 黑马程序员___综合练习 计算代码总行数

    计算代码总行数

    思路:1.判断给出的路径是文件还是文件夹

                2.如果是文件,用 把文件分割成一个数组,计算数组元素个数就可以得出文件总行数

          如果是文件夹,获得文件夹的所有内容,包括文件和文件夹,然后有递归算出文件夹所有代码的总行数 

    考察内容:NSString、NSArray、NSFileManager的使用

    代码演示:

    #import <Foundation/Foundation.h>
    
    NSUInteger codeLineCount(NSString *path);
    
    
    int main()
    {
        
        NSUInteger count = codeLineCount(@"/Users/fengze/Desktop");
        NSLog(@"%ld",count);
        return 0;
    }
    
    NSUInteger codeLineCount(NSString *path)
    {
        //1.获取文件管理者
       NSFileManager *mgr = [NSFileManager defaultManager];
        
        //2.标记是否为文件夹
       BOOL dir = NO;
        
        //标记这个路径是否存在
        BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
        
        //3.如果不存在,直接返回0
        if (!exist)
        {
            NSLog(@"文件不存在!!!");
            return 0;
        }
        
        if (dir)
        {//文件夹
            //获得当前文件夹path下面的所有内容(文件夹、文件)
            NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
            
            //定义一个变量保存path中所有文件的总行数
            int count = 0;
            // 遍历数组中的所有文件(夹)名
            for(NSString *fileName in array)
            {
                //获得子文件(夹)的全路径
                NSString *fullPath = [NSString stringWithFormat:@"%@%@",path,fileName];
                //累加每个子路径的总行数
                count += codeLineCount(fullPath);
            }
            return count;
        }
        else
        {//文件
            
           //判断文件的拓展名(忽略大小写)
            NSString *extension = [[path pathExtension] lowercaseString];
            if(!([extension isEqualToString:@"h"]
                 &&[extension isEqualToString:@"c"]
                 &&[extension isEqualToString:@"m"]))
            {
                //文件拓展名不是h,c,m
                return  0;
            }
             // 加载文件内容
            NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
            //将文件内容切割为每一行
            NSArray *array = [content componentsSeparatedByString:@"
    "];
            
            //删除文件路径前面的/Users/fengze/Desktop/练习/
            NSRange range = [path rangeOfString:@"/Users/fengze/"];
            NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
            
            //打印文件路径和行数
            NSLog(@"%@ - %ld",str,array.count);
            return array.count;
                  
        }
    }
  • 相关阅读:
    文章截断显示方法
    mysql数据库基础知识和认识
    js 返回上一页和刷新以及页面跳转
    编译原理根据项目集规范族构造LR(0)分析表
    编译原理LR(0)项目集规范族的构造详解
    编译原理复习
    FIRST集合、FOLLOW集合及LL(1)文法求法
    UML时序图
    UML活动图(二)
    UML活动图(Activity Diagram)
  • 原文地址:https://www.cnblogs.com/jia694600474/p/4012362.html
Copyright © 2011-2022 走看看