8-字串的壓縮儲存

outer_star發表於2018-08-17

給定一個字串,只包含小寫字母,輸出他的壓縮儲存形式。
aaabbbbcdf
輸出為 3a4bcdf
abcdef 1a1b1c1d1e1f


程式碼1(自己寫的):

#include <iostream>
#include <stdio.h>
#include <cstring>
const int maxn = 100;
using namespace std;

char num[maxn];
int main()
{
    int cot = 1,i = 1;
    scanf("%s",&num);       //存在缺陷,scanf只能讀取一個單詞,遇到空格將返回
   //gets(num);               //gets缺陷是無法判斷輸入的字串是否超過陣列長度

   while(i<strlen(num))
   {
        while((i < strlen(num)) && (num[i] == num[i-1]))
        {
            cot++;
            i++;
        }
        if(cot>1)
            printf("%d%c",cot,num[i-1]);
        else
            printf("%c",num[i-1]);
        i++;
        cot = 1;
   }

    if(cot>1)
        printf("%d%c",cot,num[i-1]);
    else
        printf("%c",num[i-1]);

    return 0;
}

程式碼2(西交wrong):

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>

using namespace std;
const int maxn = 1005;
typedef pair<int,int> P;
char s[maxn];
int main()
{
    cin>>s; //len>=1
    int cot=1,i=1; //當前重複串的長度為1
    //aaab
    while(i<strlen(s))
    {
        while(i<strlen(s)&&s[i]==s[i-1]) {i++;cot++;}
        if(cot>1) printf("%d%c",cot,s[i-1]);
        else printf("%c",s[i-1]);
        cot=1;
        i++;
    }
    if(cot>1) printf("%d%c",cot,s[i-1]);
    else printf("%c",s[i-1]);
   return 0;
}

(感謝西交wrong學長提供以上題目練習)

相關文章