2011-05-06 73 views
1

我在寫一個需要處理字符串(char *)的高性能函數。在C++字符串處理中跳過字符重複

這些字符串通常很長,但包含重複字符,一旦字符處理完畢,字符就不起作用。

我已經實現了一個std :: set來存儲處理後的字符,並在處理之前檢查字符是否在set中。

有沒有更有效的方法可以想到?

感謝

SOLUTION:

我去一個布爾數組。

bool b[256] = {0}; 
... 
if(!b[*ci]){ 
    b[*ci]=true; 
    ... 
} 

感謝您的幫助!

回答

1

您需要一個初始化爲0的256位(32字節)列表,然後在您看到一個字符時設置這些位。創建該數據類型的最簡單方法是將其分成4個8字節整數,然後您可以檢查字符的範圍以查看要檢查/寫入的int。

5

只是一個數組,它與字符數一樣長,並勾選數組中的字符。

+0

ya我認爲這一個是theta(1)和hipyhop的方法是theta(lg(n)) – atoMerz 2011-05-06 13:23:34

3
unsigned char cCheck[256]; 

void Process(const char* p_cInput) 
{ 
    memset(cCheck, 0, 256); 
    while(*p_cInput != '\0') 
    { 
     if(cCheck[*p_cInput] == 0) 
      cCheck[*p_cInput] = 1; 
     else 
     { 
      // We done 
      break; 
     } 

     p_cInput ++; 
    } 
}