Item 2 3 大小寫不敏感的string

2021-08-25 21:25:32 字數 1027 閱讀 5569

實現乙個「大小寫不敏感」的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...