- /*
- 二、题目描述(40分):
- 通过键盘输入一串小写字母(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>
- using namespace std;
- void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
- {
- int count = 1;
- int j = 0;
- for(int i = 0;i < lInputLen;i++)
- {
- if((pInputStr[i] != '\0') && (pInputStr[i] == pInputStr[i+1]))
- {
- count++;
- }
- else
- {
- if(count >1) //count>1的情况.
- {
- pOutputStr[j++] = (char)(count + '0');//注意将int型转化为char型表示.
- pOutputStr[j++] = pInputStr[i];
- count = 1;
- }
- else
- //count等1的情况.
- pOutputStr[j++] = pInputStr[i];
- }
- }
- pOutputStr[j] = '\0';
- }
- int main()
- {
- char input[20] = "cccddecc";
- char output[20];
- stringZip(input,20, output);
- cout << output << endl;
- char input1[20] = "adef";
- char output1[20];
- stringZip(input1,20, output1);
- cout << output1 << endl;
- char input2[20] = "pppppppp";
- char output2[20];
- stringZip(input2,20, output2);
- cout << output2 << endl;
- return 0;
- }
华为机试——字符串压缩(stringZip)
最新推荐文章于 2023-04-29 14:21:35 发布