zoukankan      html  css  js  c++  java
  • word count程序,以及困扰人的宽字符与字符

    一个Word Count程序,由c++完成,有行数、词数、能完成路径下文件的遍历。

    遍历文件部分的代码如下:

    void FindeFile(wchar_t *pFilePath)
        {
            CFileFind finder;
            CString Finddir;
            Finddir.Format(pFilePath);
            BOOL ret = finder.FindFile(Finddir);
            while (ret)
            {
                ret = finder.FindNextFile();
                CString strPath = finder.GetFilePath();
                if (finder.IsDirectory())
                {
                    wchar_t *temp = strPath.GetBuffer(0);
                    temp += strPath.GetLength();
                    while (*temp != ('\'))
                    {
                        temp--;
                    }
                    CString Filename = temp;
                    if (Filename == "\." || Filename == "\..")
                        continue;//如果是目录不处理
                    else
                    {
                        FindeFile(strPath.GetBuffer(0));
                        //TRACE("目录:%s
    ", strPath);
                    }
                }
                else
                {
                    //TRACE("文件:%s
    ", strPath);
                    wchar_t *test;
                    char *TEST;
                    test = strPath.GetBuffer(strPath.GetLength());
                    TEST = WtoC(test);
                    cout << "
    
    文件" << TEST << endl;
                    ReadFile(TEST);
                }
            }
            finder.Close();
        }
    View Code

    仍然是上次的问题,使用一些MFC的函数时,不可避免会使用到wchar_t类型的,为此写了两个函数WtoC与CtoW来实现两种字符类型字符串的互相转换,代码如下:

    char* WtoC(wchar_t *a)
    {
        char* TEST;
        size_t len = wcslen(a) + 1;
        size_t converted = 0;
        TEST = (char*)malloc(len*sizeof(char));
        wcstombs_s(&converted, TEST, len, a, _TRUNCATE);
        return TEST;
    }
    wchar_t* CtoW(char *a)
    {
        size_t len = strlen(a) + 1;
        size_t converted = 0;
        wchar_t *test;
        test = (wchar_t*)malloc(len*sizeof(wchar_t));
        mbstowcs_s(&converted, test, len, a, _TRUNCATE);
        return test;
    }
    View Code

    一开始写完时出现了遍历出来的文件名无法转换,不止无法转换,连输出都输出不了。卡在这一部分许久,至今未知其原因(过后此问题又莫名消失了)今后还是尽量少用两种字符类型字符串混用的程序。

    查找行数、词数部分的代码就不贴了,写的图森破没什么好说的。

    功能控制上使用了命令行参数,第一次使用这种方式。main函数如下:

    int main(int argc, char* argv[])
    {
        char *filet = "d:	est	.txt";
        Wc wctest;
        if (argv[1][1] == 's')
        {
            filet = argv[2];
            wchar_t* F;
            F = CtoW(filet);
            wctest.mod = 'o';
            wctest.HL = 1;
            wctest.FindeFile(F);
            cin >> filet;
            return 1;
        }
        if (argc == 1)
        {
            cout << "缺少参数!" << endl;
        }
        else if (argc == 2)
        {
            wctest.mod = 'o';
            wctest.HL = 1;
            filet = argv[1];
        }
        else if (argc == 3)
        {
            wctest.mod = argv[1][1];
            wctest.HL = 0;
            filet = argv[2];
        }
        else if (argc == 4)
        {
            wctest.mod = argv[1][1];
            if (argv[2][1] == 'a')
                wctest.HL = 1;
            else
                wctest.HL = 0;
            filet = argv[3];
        }
        wctest.ReadFile(filet);
        cin >> filet;
        return 0;
    }
    View Code

    参数中 -l 为行数检查、-w为词数检查,-c为字符数检查,-a为高级模式(空行、注释行、代码行),-o为全输出模式,-s为遍历模式。

    在参数如下时

    对如下的文件夹:

    遍历结果如下:

    没有对子路径下的文件继续遍历。

  • 相关阅读:
    python timeit模块用法
    boto3库限速
    golang-Beego-orm创建的坑
    Java07
    Java06
    Java04
    Java03
    c
    Mac 安装GCC
    命令: go build
  • 原文地址:https://www.cnblogs.com/xxjkdtx/p/5303102.html
Copyright © 2011-2022 走看看