华为机试——字符串压缩

字符串压缩

通过键盘输入一串小写字母(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
#include
const int N=100;
using namespace std;
void stringZip(const char *pInputStr, long InputLen, char *pOutputStr);
int main()
{char input[N];char *output=new char[strlen(input)+1];//为字符串数组分配地址//int len=0;cin.getline(input,N);//len=strlen(input);stringZip(input,strlen(input),output);cout<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';
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部