字串壓縮演算法

2021-04-02 01:48:03 字數 3644 閱讀 5434

最近我研究出來一種對字串壓縮的演算法,雖然還有一定的缺陷。就是如果字串中的字母過多的話,壓縮效率會大大降低。這個演算法主要是為壓縮數字設計的。

現在把原始碼共享出來,希望大家多提意見。

using system;

namespace new919.encrypt

;private static string strstringinstring = "";

private static string strnumberinstring = "";

#region 壓縮方法

#endregion

#region 轉換為64進製方法

public  static string compress(string p_string)

else

//      else

//      }}

// 第一次取數字串之後 , 整個字串遺留下來的部分

string strafterfirst = p_string.substring(0 , p_string.length - strconnectfirst.length);

// 第一次擷取完畢 , 成功分離數字段和字母段

#endregion

#region 第二次擷取 , 在第一次擷取的基礎上 , 在 strafterfirst 字串的末尾尋找數字字元

// 首先判斷第一次擷取的數字串的長度是不是為16位 , 如果是的 , 字母段的末尾還可能存在數字字元 , 進一步的擷取

if(strconnectfirst.length == 16)

else

//       else

//       }}

// 第二次擷取數字串之後 , 整個字串遺留下來的部分

// 第二次擷取成功完成

}string straftersecond = strafterfirst.substring(0 , strafterfirst.length - strconnectsecond.length);

#endregion

#region 第三次擷取

if(strconnectsecond.length == 16)

else

//       else

//       }}

}string strafterthird = straftersecond.substring(0 , straftersecond.length - strconnectthird.length);

#endregion

#region 第四次擷取

if(strconnectthird.length == 16)

else}}

}//    string strafterfourth = strafterthird.substring(0 , strafterthird.length - strconnectthird.length);

#endregion

// 壓縮之後的

string straftercompressed = to64(strconnectfourth) + to64(strconnectthird) + to64(strconnectsecond) + to64(strconnectfirst);

return straftercompressed;

//   }

//   catch(exception ex)

//   

}///

/// 轉換為64進製方法

///

/// 源字串(數字形式的)

/// 轉換之後的字串(裡面的表示符由資料字典中定義的)

private static string to64(string strsource)

while(longnumber != 0);

string strcompress = "";

for(int i = intorder - 1 ; i > -1 ; i -- )

return strcompress;

}else

}#endregion

#region 把64進製轉換為10進製的方法

///

/// 把64進製轉換為10進製的方法

///

/// 待轉換的字串(必須是數字形式的)

/// 轉換完之後的十進位制數

private static string to10(string strsource)}}

return convert.tostring(longafter);

}else

}#endregion

#region 解壓縮的方法

///

/// 解壓縮的方法

///

/// 待解壓縮的字串

/// 解壓縮之後的原數字串

public static string uncompress(string p_string)

string strcompressednumber = to10(strincisefourth) + to10(strincisethird) + to10(strincisesecond) + to10(strincisefirst);

return connectstring(strcompressednumber);

}#endregion

#region 分割字串方法

private static string incise(string p_string)

return strincisefirst;

}else

}#endregion

#region 分離數字和字母

///

/// 把待壓縮串中的數字和字母分離,以便分別處理

///

///

///

private static string  separate(string p_string)

else

}// 把字串中的數字串部分返回

return strnumberinstring;

}#endregion

///

/// 把字母段和數字段連線起來

///

/// 數字段

/// 解壓縮之後的字串

private static string connectstring(string p_strnumber)

else

}// 執行完上面的這個過程 , 已經成功的把字母段和每個字母的位置分析出來了

// 之後的要做的只是按照每個字母的位置逐個把每個字母新增到解壓縮時候的數字段中去 , 就完成了解壓縮的過程

// 在上面的過程中 , 還不能把位置段的每個位置轉換為10進製 , 因為轉換之後就不知道是應該去一位數字還是兩位 , 必須在連線的迴圈過程中轉換為10進製 , 那時候每次都只取乙個字元(作為位置),但是前提是每個字母在原字串中的位置必須小於64

}// 如果長度等於0 , 說明壓縮之前的字串中沒有字母,是純數字串 , 不需要執行下面的過程

if(strstringbeforecompress.length != 0)

while(intorder > chararrletterorder.length);

}return p_strnumber;}}

}

演算法 字串壓縮

今天做了一道字串壓縮的演算法題,原題的輸入字串長度都固定了,突然想到如果輸入不固定,也就是不知道要輸入的字串長度的話,那應該怎麼做呢?c 中stl裡的vector是個不錯的選擇。通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字...

字串壓縮演算法

時間限制 1秒 空間限制 32768k12 34輸入一串字元,請編寫乙個字串壓縮程式,將字串中連續出現的重複字母進行壓縮,並輸出壓縮後的字串。例如 aac 壓縮為 1ac xyyyyyyzbbb 壓縮為 3x5yz2b 輸入描述 任意長度字串 輸出描述 壓縮後的字串 輸入例子1 xyyyyyyzbb...

字串壓縮演算法

輸入一串字元,請編寫乙個字串壓縮程式,將字串中連續出現的重複字母進行壓縮,並輸出壓縮後的字串。例如 aac 壓縮為 1ac xyyyyyyzbbb 壓縮為 3x5yz2b任意長度字串壓縮後的字串 xyyyyyyzbbb3x5yz2b小紅書19年校招題,這道題在刷pat乙級的時候有寫到過類似的題 pa...