判斷一個字符c是否在一個字符串str中,你會怎麼處理? 1.for或者while循環判斷 能夠,可是效率夠嗆 2.創建size爲256的靜態映射表char tb[256],將字符串str中的全部數值映射到tb中,判斷tb[c]==1就能夠知道字符是否存在str中。 能夠,仍是能夠優化的 3.用位壓縮技術對tb進行優化,因爲每個char有8位,表能夠壓縮成char tb[256/8]; 首先壓縮str到tb中 do { tb[*str >> 3] |= 1 << (*str & 7) } while(*(++str)); 這段代碼什麼意思呢? *str >> 3 右移三位等於*str/8 1 << (*str & 7) 求出str的後三位的值,進行bit位移之後0-7的值分別對應第1-8bit 運算完畢,tb的每個字符均表明8個待校驗的字符,即tb中字符的每一位都表明了ascII的一個字符。 判斷目標的bit是否被標記過,標記過即c存在於tb中。 if(tb[c >> 3] & 1 << (c & 7)) 計算的過程和壓縮的過程同樣,tb[c >> 3]計算出對應哪一個字符,1 << (c & 7)求出該對應字符的哪一位,二者位與就是壓縮後的字符標記。 經過位運算進一步優化了內存佔用。 2和3方法各有優劣,結合場景仍是很容易分辨該用哪一個方法的。 --剛升級了win10,全部的瀏覽器打開博客園的編輯控件都有異常,只用ie能編輯,但格式也異常,等正常了再修改一下排版。