bit-map程序,解決:
已知某個文件內包含一些電話號碼,每個號碼爲8位數字,統計不同號碼的個數。很有用處
引用於:
http://blog.sina.com.cn/s/blog_6f7ecc9b0100myum.html
//解決已知某個文件內包含一些電話號碼,每個號碼爲8位數字,統計不同號碼的個數。 //定義每個Byte中有8個Bit位 #include <memory.h> #include <stdio.h> #include <conio.h> #define BYTESIZE 8 void SetBit(char *p, int posi) { for(int i=0; i<(posi/BYTESIZE); i++) { p++; } *p = *p|(0x01<<(posi%BYTESIZE));//將該Bit位賦值1 return; } void BitMapSortDemo() { //爲了簡單起見,我們不考慮負數 int num[] = {3,5,2,10,6,12,8,14,9}; //BufferLen這個值是根據待排序的數據中最大值確定的 //待排序中的最大值是14,因此只需要2個Bytes(16個Bit) //就可以了。 const int BufferLen = 2; char *pBuffer = new char[BufferLen]; //要將所有的Bit位置爲0,否則結果不可預知。 memset(pBuffer,0,BufferLen); for(int i=0;i<9;i++) { //首先將相應Bit位上置爲1 SetBit(pBuffer,num[i]); } //輸出排序結果 for(int i=0;i<BufferLen;i++)//每次處理一個字節(Byte) { for(int j=0;j<BYTESIZE;j++)//處理該字節中的每個Bit位 { //判斷該位上是否是1,進行輸出,這裏的判斷比較笨。 //首先得到該第j位的掩碼(0x01<<j),將內存區中的 //位和此掩碼作與操作。最後判斷掩碼是否和處理後的 //結果相同 if((*pBuffer&(0x01<<j)) == (0x01<<j)) { printf("%d ",i*BYTESIZE + j); } } pBuffer++; } } int main(int argc, char* argv[]) { BitMapSortDemo(); _getch(); return 0; }