2014华为机试——字符串压缩
2014-07-17 20:25
399 查看
// 通过键盘输入一串小写字母(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> using namespace std; void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) { unsigned int count = 1; //统计每个字符出现的次数,初始值为1 for (int i=0; i<lInputLen-1; ++i) { if (pInputStr[i] == pInputStr[i+1]) { ++count; } else { if (count > 1) { *pOutputStr++ = (char)count + '0'; *pOutputStr++ = pInputStr[i]; } else { *pOutputStr++ = pInputStr[i]; } count = 1; } }//end for //对于最后一个元素,如果,pInputStr[len-1] == pInputStr[len-1-1],则说明,最后一个字符也是重复的,并且没有输出count和字符 //故可以直接输出count和pInputStr[i],最后添加'\0'. //但是当pInputStr[len-1] != pInputStr[len-1-1]时,说明最后一个字符和前面是不连续的,并且前面的count和字符也已经输出故了 //此时只要输出pInputStr[i]即可,最后添加'\0' if (pInputStr[i] == pInputStr[i-1]) { *pOutputStr++ = (char)count + '0'; *pOutputStr++ = pInputStr[i]; *pOutputStr = '\0'; } else { *pOutputStr++ = pInputStr[i]; *pOutputStr = '\0'; } } int main() { char a[10] = "xxxyyyz"; char b[10] = ""; stringZip(a, strlen(a), b); cout << b << endl; return 0; }
相关文章推荐
- 2014华为机试之字符压缩字符过滤字符串加减法
- 2014华为校园招聘机试——字符串过滤、压缩等
- 2014华为机试题-字符串压缩
- 华为2014机试字符串压缩
- 第十六题 2014华为机试题 字符串压缩程序
- 华为2014机试字符串压缩
- 算法思维——字符串压缩程序(华为2014校园招聘的机试题目)
- 华为2014校园招聘:压缩字符串
- 2014华为机试之字符压缩字符过滤字符串加减法
- (华为机试)字符串压缩
- 华为机试之字符串压缩问题
- 华为字符串压缩程序
- 【2014华为机试题】01.字符串右补齐
- 2014华为机试-字符串替换
- 华为机试-字符串的压缩
- 微软2014编程之美初赛第二场——题目2 : 字符串压缩
- 华为面试题:请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 2014华为实习上级笔试题-- 统计字符串中出现的单词
- 华为机试——字符串过滤&字符串压缩
- 华为机试之压缩字符串