2013华为机试字符串压缩
来源:互联网 发布:oracle数据库删除语句 编辑:程序博客网 时间:2024/05/26 14:12
编译环境为VC6.0:
二、题目描述(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”
个人实现代码(c):
#include <stdio.h>
#include <string.h>
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
if(lInputLen <= 0)
{
pOutputStr[0] = '\0';
return;
}
int outlen = 0; //输出字符串pOutputStr当前长度
for(int i = 0; i < lInputLen; ++i) //因为字符有lInputLen个所以字符下标范围为0~lInputLen-1,下标lInputLen存放'\0'
{
int cnt = 1;
while(pInputStr[i] == pInputStr[i+1])
{
++cnt;
++i;
}
if(cnt != 1)
outlen += sprintf(pOutputStr + outlen, "%d", cnt); //sprintf的返回值是当次打印到数组中的字符串长度,这句话求得pOutputStr当前总长度
outlen += sprintf(pOutputStr + outlen, "%c", pInputStr[i]);
}
}
个人实现代码(c++):
#include <iostream>#include <string>#include <sstream>using namespace std;void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){string str(pInputStr);ostringstream ostr;while(str.size()){int cnt = 1;string::iterator iter = str.begin();while(iter != str.end()-1){if(*iter == *(iter + 1)){++cnt;iter = str.erase(iter);}elsebreak;}if(cnt != 1)ostr << cnt;ostr << *iter;str.erase(iter);}istringstream istr(ostr.str());istr >> pOutputStr;}
贴上一个不带任何IO的:
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
if(lInputLen <= 0)
{
pOutputStr[0] = '\0';
return;
}
string outstr; //用来暂时存放输出字符串
for(int i = 0; i < lInputLen; ++i) //因为字符有lInputLen个所以字符下标范围为0~lInputLen-1,下标lInputLen存放'\0'
{
int cnt = 1;
while(pInputStr[i] == pInputStr[i+1])
{
++cnt;
++i;
}
if(cnt != 1)
outstr += itoa(cnt, pOutputStr, 10);
outstr += pInputStr[i];
}
outstr += '\0';
outstr.copy(pOutputStr, outstr.size());
}
- 2013华为机试字符串压缩
- 华为机试 题目3 - 字符串压缩
- (华为机试)字符串压缩
- 华为机试---字符串的压缩处理
- 华为机试之字符串压缩问题
- 华为机试—字符串压缩
- 华为机试—字符串压缩
- 华为2014机试字符串压缩
- 华为机试之压缩字符串
- 华为机试——字符串压缩
- 华为机试题---字符串压缩
- 华为机试——字符串过滤&字符串压缩
- 华为机试——字符串压缩(stringZip)
- 2014华为机试——字符串压缩
- 华为机试总结(一)字符串过滤、压缩
- 华为机试——字符串压缩(stringZip)
- 2014华为机试题-字符串压缩
- 2014华为机试题8:压缩字符串
- 插入排序,冒泡排序,桶式排序
- static class 和 static interface
- ZeroMQ研究与应用分析
- NGUI控件说明(中文) Tweens
- Android实战技巧:如何在ScrollView中嵌套ListView
- 2013华为机试字符串压缩
- 硬件虚拟化
- 完全平方数
- Tizen应用挑战赛结果揭晓
- 希尔排序
- HR给应届生的黄金面试技巧
- Oracle数据导入、导出命令
- 2014年2月23日小练习的补题、
- CentOS后台任务执行相关命令