/*
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”
*/
ps:When we code java, about the problem: int to char, java cut prefix, leaving ......
import java.io.*;
public class Test
{
public static void main(String args[]) throws IOException
{
BufferedReader buf;
String str;
buf = new BufferedReader(new InputStreamReader(System.in));
str = buf.readLine();
// call method;
char[] output = characterZip(str);
System.out.println(output);
}
// Char Zip
public static char[] characterZip(String str)
{
char[] ch = str.toCharArray();
char[] output = new char[ch.length];
int i = 0;
int len = ch.length;
int cnt = 1;
int arrayIndex = 0;
for (i = 1; i < len; ++i)
{
if (ch[i-1] == ch[i])
cnt++;
else
{
if (cnt == 1)
{
output[arrayIndex++] = ch[i-1];
cnt = 1;
}
else
{
String ss = ""+cnt;
char cc[] = ss.toCharArray();
output[arrayIndex++] = cc[0]; // 容易出问题,more methods for this problems.
output[arrayIndex++] = ch[i-1];
cnt = 1;
}
}
}
if (cnt == 1)
output[arrayIndex] = ch[i-1];
else
{
output[arrayIndex++] = (char)(cnt + '0'); // 容易出问题
output[arrayIndex] = ch[i-1];
}
return output;
}
}