华为的一道机试题及答案(压缩字符串)
2014-02-12 17:48
344 查看
通过键盘输入一串小写字母(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”
下面是我自己编写的代码,供参考:
点击(此处)折叠或打开
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
char * pPre;
char * pCur = '\0';
char * pNext;
strcpy(pOutputStr,pInputStr);
int len = 0;
for (pPre = (char *)pInputStr,pCur = (char *)pOutputStr; pPre != '\0' && len < lInputLen -1;len ++)
{
*pCur = *pPre;
for (pNext = pPre+1;pNext != '\0';pNext++)//循环判断是否重复
{
if (*pNext == *pPre)
{
*pCur = '1' + pNext - pPre;//记录重复的个数
}
else
break;
}
if (*pNext == '\0' && (pNext - pPre) == 1)//到达字符串的末尾
{
*(pCur+1) = '\0';
break;
}
if ((pNext - pPre) == 1)//如果没有重复的
{
*pCur = *pPre;
pCur++;
pPre++;
}
else if((pNext - pPre) > 1)//有重复的
{
*++pCur = *pPre;
pPre = pNext;
*++pCur = *pPre;
}
}
}
例如输入:abcd
输出:
输入:cccddecc
输出:
输入:aaaaa
输出:
阅读(1271) | 评论(4) | 转发(0) |
0
上一篇:16道嵌入式C语言笔试面试题(经典!)
下一篇:虚函数和纯虚函数的区别
相关热门文章
web.py 学习 20140211
让php支持yar.packager,可以...
世界杰出华商协会十大冤 中非...
安装apk时选择错误的CPU_ABI...
html5记录
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
一个简单的shell脚本问题...
网站如何做图片的防盗链功能呢...
如何将printf输出的字符(含有...
嵌入式linux wifi移植 libert...
Ø ⊆ {Ø} 是否是对的 ,这么...
给主人留下些什么吧!~~
weiweipossible2013-12-12 21:40:38
void strzip(char* in, int len, char* o)
{
int i, accum, zip, off;
char prev;
for(i = 0,accum = 0,prev = in[0],zip = 0,off = 0 ;
i <= len ; i++)
{
if(prev == in[i])
&
回复 | 举报
dongliyun2013-12-12 10:29:21
triyes:aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?
貌似这样就不对了,问题出在*pCur = '1' + pNext - pPre;//记录重复的个数 这里,有空我再修改一下。回复 | 举报
husty8662013-12-11 07:20:24
I guess it is:
Ma
回复 | 举报
triyes2013-12-10 23:15:05
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?
回复 | 举报
评论热议
压缩规则:
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”
下面是我自己编写的代码,供参考:
点击(此处)折叠或打开
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
char * pPre;
char * pCur = '\0';
char * pNext;
strcpy(pOutputStr,pInputStr);
int len = 0;
for (pPre = (char *)pInputStr,pCur = (char *)pOutputStr; pPre != '\0' && len < lInputLen -1;len ++)
{
*pCur = *pPre;
for (pNext = pPre+1;pNext != '\0';pNext++)//循环判断是否重复
{
if (*pNext == *pPre)
{
*pCur = '1' + pNext - pPre;//记录重复的个数
}
else
break;
}
if (*pNext == '\0' && (pNext - pPre) == 1)//到达字符串的末尾
{
*(pCur+1) = '\0';
break;
}
if ((pNext - pPre) == 1)//如果没有重复的
{
*pCur = *pPre;
pCur++;
pPre++;
}
else if((pNext - pPre) > 1)//有重复的
{
*++pCur = *pPre;
pPre = pNext;
*++pCur = *pPre;
}
}
}
例如输入:abcd
输出:
输入:cccddecc
输出:
输入:aaaaa
输出:
阅读(1271) | 评论(4) | 转发(0) |
0
上一篇:16道嵌入式C语言笔试面试题(经典!)
下一篇:虚函数和纯虚函数的区别
相关热门文章
web.py 学习 20140211
让php支持yar.packager,可以...
世界杰出华商协会十大冤 中非...
安装apk时选择错误的CPU_ABI...
html5记录
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
一个简单的shell脚本问题...
网站如何做图片的防盗链功能呢...
如何将printf输出的字符(含有...
嵌入式linux wifi移植 libert...
Ø ⊆ {Ø} 是否是对的 ,这么...
给主人留下些什么吧!~~
weiweipossible2013-12-12 21:40:38
void strzip(char* in, int len, char* o)
{
int i, accum, zip, off;
char prev;
for(i = 0,accum = 0,prev = in[0],zip = 0,off = 0 ;
i <= len ; i++)
{
if(prev == in[i])
&
回复 | 举报
dongliyun2013-12-12 10:29:21
triyes:aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?
貌似这样就不对了,问题出在*pCur = '1' + pNext - pPre;//记录重复的个数 这里,有空我再修改一下。回复 | 举报
husty8662013-12-11 07:20:24
I guess it is:
Ma
回复 | 举报
triyes2013-12-10 23:15:05
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?
回复 | 举报
评论热议
相关文章推荐
- 16道嵌入式C语言笔试面试题(经典!)
- 百度的一道面试题(关于Cache的)
- Linux C开发面试试题与答案
- (转)考查嵌入式C开发人员的最好的16道题
- 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析
- 华为C语言笔试题集合
- c++构造函数详解
- linux面试题参考答案
- Shell脚本编程的常识
- 周鸿祎:给那些仍旧在公司混日子的人
- C++练习之template操作
- CTeX刷新FNDB 和 使用gnuplot绘图
- memcache基础知识-stats参数
- ubuntu下软件包安装
- 面试题
- 2012搜狗校园面试题
- C/C++笔试题目大全
- 程序员有趣的面试智力题
- 程序员面试100题之一:对称字符串的最大长度
- windows任务计划