實現乙個「大小寫不敏感」的string類:
ci_string s( "abcde" ); assert( s == "abcde" ); // 1. 大小寫不敏感 assert( s == "abcde" ); // 1. 大小寫不敏感 assert( strcmp( s.c_str(), "abcde" ) == 0 ); // 2. 保留大小寫狀態 assert( strcmp( s.c_str(), "abcde" ) != 0 ); // 2. 保留大小寫狀態
程式:templatestruct ci_char_traits: public char_traits static bool __clrcall_or_cdecl lt(const _elem& _left, const _elem& _right) static int compare(const char* s1, const char* s2, size_t n) }; typedef basic_string> ci_string; bool operator == (const ci_string& s1, const ci_string& s2)
編譯時會出現4個c4996警告,都是對vc的stl內部實現的說明。不明白,暫時無視之。
1> 大小寫敏感是非常重要的屬性
2> ci_char_traits是從char_traits公有派生,此處並不是常見的is-a關係,所以不符合lsp原則(liskov substitution principle)。
c++標準庫中的traits並不是為派生而創造的,所以違反了lsp原則也沒關係。因為ci_char_traits是當作模板引數的,符合模板引數的要求就可以了。
3> 雖然ci_char_traits是char_traits的子類,但是下面的**無法編譯:
ci_string s = "abc";
cout << s << endl;
要找原因,看operator《和cout的定義:
看的出來,cout只能使用char_traits,而不認ci_char_traits。從側面說明了模板庫里的公有派生,並不是is-a的關係。
git檔名大小寫不敏感
由於專案檔案命名不規範,需要修改專案中檔名的大小寫。但是當你只修改檔名的大小寫,無法提交,git沒有監控到你做了更改。使用git命令 file from 為原檔名,可以是路徑,例如 src file to 為更改後的檔名 gitmv file from file togit mv命令用來執行移動或者...
mysql查詢對大小寫不敏感的問題
之前專案到遇到了這樣的問題來總結一下 專案中經常用到模糊查詢,如 有個username欄位的的內容是 aa812135023,我們查詢這條記錄,查詢的sql select from 表 where username like aa 能找到這條記錄,但是用 select from 表 where us...
oracle設定字母大小寫不敏感對impdp無效
又雙叒叕遇到了喜聞樂見的字母大小寫bug 最近在新建專案的資料庫時候又遇到了字母大小寫的問題,首先新建oracle例項 opf2monitor 接著新建了表空間 pyac 然後新建了使用者 monitor kp123456 並賦予各種許可權,最後使用impdp命令 impdp monitor kp1...