最近上班的時候接到乙個需求:
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...