CString比較時要注意的

2021-05-23 09:21:08 字數 1470 閱讀 2934

最近上班的時候接到乙個需求:

1、使用者給定了乙個列表,裡面是一些中英文混雜的字串,標點符號也是混的:

比如:序號          名稱

1      1號和a去圖書館——有英文數字、中文、英文小寫

2      和同學b聚會定在22日——有全形數字、中文、英文小寫

3     c的書名是「數學」——有中文標點符號、中文、英文大寫

4      "jack"是他的名字——有英文標點符號、中文、英文

同時又給出一組極大的資料,要求從這些資料裡找出,和上面的列表匹配的資料並生成報表,另外把資料中沒有的列表項也生成乙個報表。

資料:     序號                                名稱

10000456                      1號和a去圖書館

21111175                      和同學b聚會定在22日

21111177                      「jack」是他的名字

要求匹配時忽略全半形和大小寫。

也就是說匹配的報表應該是:

序號                名稱                            在資料中的序號

1              1號和a去圖書館                   10000456

2              和同學b聚會定在22日            21111175 

3              「jack」是他的名字                  21111177

另外乙個報表應該是:

序號                名稱  

1              c的書名是「數學」 

實際的資料非常大,無論比較的條件是什麼,都必須把資料一條一條讀出來,再和列表中的資料一條一條進行比較,那麼這就是乙個雙重迴圈,對於大資料的處理,這無疑是個災難,所以,我首先做的是在讀取列表時,構造索引,讀取列表中每乙個名稱時,將字串的前2個字元作為索引,存放在map中,這樣在比較時就可以大大縮減查詢的時間。

另外是客戶的忽略全半形和大小寫的要求。

我們公司用的是c++,所以對字串的處理都使用cstring,msdn裡提供了這樣乙個函式lcmapstring,它可以輕鬆的實現半形轉全形、全形轉半形,而cstring本身有comparenocase函式,可以忽略大小寫來進行比較。

這裡在實際處理時有這樣乙個問題,如果在讀取列表中的資料時,將列表中的資料直接半形轉全形然後儲存,在比較時,將資料也做半形轉全形,那麼在比較時,對中文符號中的引號就沒法比較了,因為英文的"半形轉全形後是",而中文的引號是分上引號和下引號的,所以比較好的方法是將所有的資料全形轉半形後再比較。

int converthornstohalfhorn(const cstring & strinvalue, cstring & stroutvalue)

學C 時要注意的

對c 學習的一點感想,希望對初學者能有些幫助 1.如果你以前從來沒有接觸過c 那麼選擇的第一本c 教程就顯得尤為重要,我認為你可以參照以下的標準進行選擇 a.對標準c 進行講解,畢竟c 比從前發生了很大的變化。b.要求全面,但不要很深,這要有助於你對於c 有乙個全面的認識,打好基礎,並且易懂的教材還...

配置時需要注意的

搭建的時候肯定不會在同一臺主機上搭建。大多都是在不同的伺服器上安裝不同的角色 追蹤器主機上的 配置檔案填寫的是 當前主機的ip 儲存節點主機上的 bind addr 填的就是當前主機的ip 配置中tracker server 填的蹤器的ip和埠 儲存節點的輪詢 就是在新增一次tracker serv...

整數相除時要注意

整數 整數 整數。當需要保留小數字時,需要強制型別轉換。表示式計算結果精度與被除數和除數中精度最高的看齊,見下例 int a 1024 int b 2048 int c 3 system.out.println a b c a b c system.out.println a float b c a...