您的位置:首页 > 其它

华为机试——字符串压缩

2016-01-12 16:28 495 查看
字符串压缩

通过键盘输入一串小写字母(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”

#include<iostream>
#include<cstring>
const int N=100;
using namespace std;
void stringZip(const char *pInputStr, long InputLen, char *pOutputStr);
int main()
{
char input
;
char *output=new char[strlen(input)+1];//为字符串数组分配地址
//int len=0;
cin.getline(input,N);
//len=strlen(input);
stringZip(input,strlen(input),output);
cout<<output;
delete output;
return 0;
}
void stringZip(const char *pInputStr, long InputLen, char *pOutputStr)
{
const char *p=pInputStr;//必须把常量指针const char*赋给常量指针
int i=0,j,num=1;
p++;
while(*p!=NULL)//总循环遍历
{
while(*p==*(p-1) && *p!=NULL)//后向遍历比较
{
num++;
p++;
}
if(num>1)
{
int size=0;
int temp;
temp=num;
while(num)//计算num的位数
{
size++;
num/=10;
}
for(j=size;j>0;j--)//倒序存储数字num的每一位,字符的位数
{
pOutputStr[i+j-1]=temp%10+'0';
temp/=10;
}
i+=size;//存储字符
pOutputStr[i++]=*(p-1);
p++;
num=1;
}
else
{
pOutputStr[i++]=*(p-1);
p++;
}
}
pOutputStr[i++]=*(p-1);
pOutputStr[i]='\0';
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: