题目描述
在数据压缩中,一个常用的途径是行程长度压缩。对于一个待压缩的字符串而言,我们可以依次记录每个字符及重复的次数。这种压缩,对于相邻数据重复较多的情况比较有效。 例如,如果待压缩串为
"AAABBBBCBB"
,则压缩的结果是
(A,3)(B,4)(C,1)(B,2)
。当然,如果相邻字符重复情况较少,则压缩效率就较低。
现要求根据输入的字符串,得到大小写不敏感压缩后的结果(即所有小写字母均视为相应的大写字母)。
输入格式一个字符串,长度大于0,且不超过10000,全部由大写或小写字母组成。
输出格式输出为一行,表示压缩结果,形式为: (A,3)(B,4)(C,1)(B,2) 即每对括号内部分别为字符(都为大写)及重复出现的次数,不含任何空格。
样例样例输入
aAABBbBCCCaaaaa
样例输出
(A,3)(B,4)(C,3)(A,5)
数据范围与提示
分类标签
[字符串] [枚举]
C++题解代码
#include <bits/stdc++.h>
using namespace std;
string a;
char b;
char c;
int d;
int e;
// The main procedure
int main() {
cin>>a;
e = ((int)'a'-(int)'A');
for (int i = 0; i < a.size(); i++) {
d++;
b = a[i];
if ((b >= 'a') && (b <= 'z')) {
b = (char)((int)b-e);
}
if (i == (a.size()-1)) {
cout<<"(";
cout<<b;
cout<<",";
cout<<d;
cout<<")";
} else {
c = a[(i+1)];
if ((c >= 'a') && (c <= 'z')) {
c = (char)((int)c-e);
}
if (b != c) {
cout<<"(";
cout<<b;
cout<<",";
cout<<d;
cout<<")";
d = 0;
}
}
}
return 0;
}
Blockly题解代码图片