原创 正則表達式引擎的構建——基於編譯原理DFA(龍書第三章)——1 概述

說明:本系列文章介紹的算法均來自編譯原理(龍書)一書,如果讀者對代碼沒有興趣,只想瞭解算法思路,完全可以閱讀龍書相關章節內容,比我講得清晰透徹。 序:     啃編譯原理半年以來,任然徘徊在前4章,其間反反覆覆,時而不求甚解,時而略有所

原创 一個完備的微型正則表達式【源碼實現】

說明:剛纔發現在處理*元字符時弄錯了,代碼修改重新上傳到CSDN了,文章中的示例代碼也進行了修改。       前一版本有錯誤的代碼中將*處理成了前一字符至少出現1次,修改後爲出現0次或多次。       如果你是通過CSDN下載找到這個

原创 幾種二分查找算法的代碼和比較

4種不同的二分查找代碼,都是正確的,但可能運行的結果都不同。至於原因,直接看代碼和註釋吧。 #include "stdafx.h" #include <iostream> #include <conio.h> using namespa

原创 多平臺工程生成工具CMAKE如何創建VS工程組——folder屬性

CMAKE是什麼? 一種將源碼根據配置文件生成編譯工程的工具。 以下是來自CMAKE官方的介紹(www.cmake.org):  the cross-platform, open-source build system. CMake is

原创 正則表達式引擎的構建——基於編譯原理DFA(龍書第三章)——3 計算4個函數

整個引擎代碼在github上,地址爲:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, lastpos, followpos函數

原创 正則表達式引擎的構建——基於編譯原理DFA(龍書第三章)——2 構造抽象語法樹

簡要介紹     構造抽象語法樹是構造基於DFA的正則表達式引擎的第一步。目前在我實現的這個正則表達式的雛形中,正則表達式的運算符有3種,表示選擇的|運算符,表示星號運算的*運算符,表示連接的運算符cat(在實際正則表達式中被省去)。 例

原创 【模式匹配】之——多模匹配 Wu-Manber算法

本文對應代碼下載地址: http://download.csdn.net/detail/sun2043430/5323248 本文參考以下兩篇文章,在此表示感謝 https://memorycn.wordpress.com/2011/1

原创 正則表達式引擎的構建——基於編譯原理DFA(龍書第三章)——4 構造DFA

整個引擎代碼在github上,地址爲:https://github.com/sun2043430/RegularExpression_Engine.git 接上篇《正則表達式引擎的構建——基於編譯原理DFA(龍書第三章)——3 計算4個函

原创 哪些東西必須放在構造函數的初始化列表中?

以下幾種情況時必須使用初始化列表: 1 常量成員,因爲常量只能初始化不能賦值,所以必須放在初始化列表裏面 2 引用類型,引用必須在定義的時候初始化,並且不能重新賦值,所以也要寫在初始化列表裏面 3 沒有默認構造函數的類類型,因爲使用初始化

原创 【龐果英雄會】最小操作數

給了A、B兩個單詞和一個單詞集合Dict,每個的長度都相同。我們希望通過若干次操作把單詞A變成單詞B,每次操作可以改變單詞中的一個字母,同時,新產生的單詞必須是在給定的單詞集合Dict中。求所有行得通步數最少的修改方法。     舉個例子

原创 正則表達式引擎的構建——基於編譯原理DFA(龍書第三章)——5 DFA最小化

完整引擎代碼在github上,地址爲:https://github.com/sun2043430/RegularExpression_Engine.git DFA最小化的算法原理 “DFA狀態最小化算法的工作原理是將一個DFA的狀態

原创 【面試題】求兩個有序數組兩兩相加的值最小的K個數

題目: 有兩個大小都是k的數組A,B,它們元素的按非遞減有序排列,找出這樣的k個最小的(ai + bj) ,其中 0<= i,j < k,要求算法的時間複雜度和空間複雜度儘量低。 例如對於: A = 1,2,3,4 B = 2,3,4,5

原创 【龐果網英雄會】4月第4次面試集訓#字符串#:字符串匹配問題

題目詳情 字符串匹配問題,給定一串字符串,按照指定規則對其進行匹配,並將匹配的結果保存至output數組中,多個匹配項用空格間隔,最後一個不需要空格。 要求: 匹配規則中包含通配符?和*,其中?表示匹配任意一個字符,*表示匹配任

原创 《代碼之美》閱讀筆記

《代碼之美》 是一本非常不錯的書,而且很獨特,獨特之處請看如下介紹(來自百度百科): 38位大師級的程序員,一步步講解他們的項目架構,開發時的種種折中考慮(trade-offs)以及何時必須打破常規,尋求突破。 全球38位頂尖高手、

原创 《C++程序設計語言》摘要

第16章 庫組織和容器 vector 容器  insert返回的是新插入元素的迭代器 erase返回的刪除元素之後下一個元素的迭代器 反向迭代器 rbegin(),是指向最後一個元素的迭代器;rend()是指向begin()前一個的迭代器