1. 程式人生 > 其它 >PTA 乙級 1078 字串壓縮與解壓 (20 分) C++

PTA 乙級 1078 字串壓縮與解壓 (20 分) C++

這個題用C我是一個一個字元處理的

有幾個需要注意的點

  • 不管壓縮還是解壓,注意第一行輸入的'\n'輸入一定要處理,我是用了一個字元去儲存(之後這個字元被清零了,用作接下來的資料的處理,重複利用)

當需要壓縮時

我是記錄當前字元和上一個字元,當上一個字元和當前字元不同時,則輸出壓縮後的字元

  • 當字元數為1時不要輸出1
  • 注意首個字元的處理,此時上一個字元尚未初始化,要特殊處理

當需要解壓時

  • 也需要注意字元數為1的情況

C/C++

 1 #include <iostream>
 2 #include <string>
 3 #include <stdlib.h>
 4
#include <cmath> 5 6 using namespace std; 7 8 int main() { 9 char s, last, c; 10 int num = 0; 11 string sum = "0"; //一定要初始化,否則測試點2會有執行時錯誤 12 c = getchar(); 13 last = getchar(); //用於接收第一行輸入結尾的空格 14 last = NULL;
15 if(c == 'C') { 16 while (last != '\n') { //回車換行時結束 17 s = getchar(); 18 if (s != last && last != NULL) { //字母變換時則輸出(排除last還沒值時的輸入) 19 if (num == 1) cout << last; 20 else cout << num << last;
21 num = 0; 22 } 23 num++; 24 last = s; 25 } 26 } else if (c == 'D') { 27 while (last != '\n') { 28 s = getchar(); 29 if (!(s >= '0' && s <= '9')) { //若輸入不為數字,此時輸出字元 30 for (int i = 0; i < stoi(sum); ++i) { 31 cout << s; 32 } 33 if (sum == "0") cout << s; //處理只有一個字元的情況 34 sum = "0"; 35 num = 0; 36 } else if (s >= '0' && s <= '9') { //用字串相加來處理輸出字母個數大於10的情況 37 sum += s; 38 num++; 39 } 40 last = s; 41 } 42 } 43 return 0; 44 }
默默地一點點變強,細節決定成敗