华为机试——字符串压缩(stringZip)

  1. /* 
  2. 二、题目描述(40分): 
  3. 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 
  4. 压缩规则: 
  5. 1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc". 
  6. 2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz" 
  7.  
  8.    
  9.     要求实现函数:  
  10.     void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr); 
  11.      
  12.        
  13.         【输入】 pInputStr:  输入字符串 
  14.         lInputLen:  输入字符串长度          
  15.         【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 
  16.          
  17.            
  18.             【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 
  19.              
  20.                
  21.                 示例  
  22.                 输入:“cccddecc”   输出:“3c2de2c” 
  23.                 输入:“adef”     输出:“adef” 
  24.                 输入:“pppppppp” 输出:“8p” 
  25. */  
  26.   
  27. #include <iostream>  
  28. using namespace std;  
  29.   
  30. void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)  
  31. {  
  32.     int count = 1;  
  33.     int j = 0;  
  34.       
  35.     for(int i = 0;i < lInputLen;i++)  
  36.     {  
  37.         if((pInputStr[i] != '\0') && (pInputStr[i] == pInputStr[i+1]))  
  38.         {  
  39.             count++;  
  40.         }  
  41.         else  
  42.         {  
  43.             if(count >1) //count>1的情况.  
  44.             {  
  45.                 pOutputStr[j++] = (char)(count + '0');//注意将int型转化为char型表示.  
  46.                 pOutputStr[j++] = pInputStr[i];  
  47.                 count = 1;  
  48.             }  
  49.             else  
  50.             //count等1的情况.  
  51.             pOutputStr[j++] = pInputStr[i];  
  52.         }  
  53.     }  
  54.     pOutputStr[j] = '\0';  
  55. }  
  56.   
  57. int main()  
  58. {  
  59.     char input[20] = "cccddecc";    
  60.     char output[20];  
  61.     stringZip(input,20, output);  
  62.     cout << output << endl;  
  63.       
  64.     char input1[20] = "adef";    
  65.     char output1[20];  
  66.     stringZip(input1,20, output1);  
  67.     cout << output1 << endl;  
  68.       
  69.     char input2[20] = "pppppppp";    
  70.     char output2[20];  
  71.     stringZip(input2,20, output2);  
  72.     cout << output2 << endl;  
  73.       
  74.     return 0;  
  75. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值