⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text_diff.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
////  Copyright (c) 2005 João Abecasis////  Distributed under the Boost Software License, Version 1.0. (See//  accompanying file LICENSE_1_0.txt or copy at//  http://www.boost.org/LICENSE_1_0.txt)//#include <fstream>#include <iostream>#include <iterator>#include <boost/spirit/core/scanner/scanner.hpp>#include <boost/spirit/core/primitives/primitives.hpp>namespace spirit = boost::spirit;typedef std::istream_iterator<char, char> iterator;typedef spirit::scanner<iterator> scanner;int main(int argc, char * argv[]){    if (argc != 3)    {        std::cerr << "ERROR: Wrong number of arguments." << std::endl;        std::cout << "Usage:\n\t" << argv[0] << " file1 file2" << std::endl;        return 1;    }    std::ifstream        file1(argv[1], std::ios_base::binary | std::ios_base::in),        file2(argv[2], std::ios_base::binary | std::ios_base::in);    if (!file1 || !file2)    {        std::cerr << "ERROR: Unable to open one or both files." << std::endl;        return 2;    }    file1.unsetf(std::ios_base::skipws);    file2.unsetf(std::ios_base::skipws);    iterator        iter_file1(file1),        iter_file2(file2);    scanner        scan1(iter_file1, iterator()),        scan2(iter_file2, iterator());    std::size_t line = 1, column = 1;    while (!scan1.at_end() && !scan2.at_end())    {        if (spirit::eol_p.parse(scan1))        {            if (!spirit::eol_p.parse(scan2))            {                std::cout << "Files differ at line " << line << ", column " <<                    column << '.' << std::endl;                return 3;            }            ++line, column = 1;            continue;        }        if (*scan1 != *scan2)        {            std::cout << "Files differ at line " << line << ", column " <<                column << '.' << std::endl;            return 4;        }        ++scan1, ++scan2, ++column;    }    if (scan1.at_end() != scan2.at_end())    {        std::cout << "Files differ in length." << std::endl;        return 5;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -