PAT compression de chaîne B1078 et de décompression (20 minutes)

Liens Sujet : https://pintia.cn/problem-sets/994805260223102976/problems/994805262018265088

Description Titre
compression texte Il y a plusieurs façons, ici nous ne considérons que le plus simple de type: un segments discrets avec les mêmes caractères et le nombre de caractères de ce fragment contenant le caractère représenté. CCCCC représenté par, par exemple, à 5c. Si le personnage ne se répète pas, il est sorti. Par exemple après la compression est encore aba aba.

Procédé de décompression est, à son tour, 5c tel que la reprise de forme est exprimé ccccc.

Votre demande que le besoin de compression ou décompression, pour une chaîne donnée pour le traitement. Ici, nous supposons simplement que la chaîne d'origine est une chaîne non vide entièrement de lettres anglaises et des espaces.

Entrée
si D est représenté par la chaîne suivante pour être décompressées; entrée de la première ligne d'un caractère donné, si C est représentée pour être comprimé par les besoins de chaîne suivantes. La deuxième ligne donne pas besoin chaîne compressée ou décompressée de 1000 caractères, avec un retour chariot à la fin. Le nombre de caractères répétés dans le titre afin de garantir que l'ensemble des entiers, et le fichier de sortie ne sont pas moins de 1Mo.

Sortie
compression de la chaîne de requête ou de décompression, et délivre en sortie le résultat sur une ligne.

entrée échantillon
C
TTTTThhiiiis de COMME tesssst la CAAAA

Exemple de sortie
5T2h4is i5 a3 te4st AC3a que

code

#include <iostream>
#include <string>
using namespace std;

int main() {
	string str;
	char c;
	scanf("%c", &c);
	getchar();
	getline(cin, str);
	int len = str.size();
	int num;
	if(c == 'C') {
		num = 1;
		char pre = str[0];
		for(int i = 1; i <= len; i++) {
			if(str[i] != pre) {
				if(num > 1)
					printf("%d", num);
				printf("%c", str[i - 1]);
				num = 1;
				pre = str[i];
			}
			else
				num++;
		}
	}
	if(c == 'D') {
		num = 0;
		for(int i = 0; i < len; i++) {
			while(str[i] >= '0' && str[i] <= '9') {
				num = num * 10 + str[i] - '0';
				i++;
			}
			if(num)
				while(num--)
					printf("%c", str[i]);
			else
				printf("%c", str[i]);
			num = 0;
		}
	}
	return 0;
}
Publié 327 articles originaux · a gagné les éloges 12 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/Rhao999/article/details/105196176
conseillé
Classement