您的位置:首页 > 其它

华为2014校园招聘的机试题目

2013-10-30 10:44 295 查看
通过键盘输入一串小写字母(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 <stdio.h>
#include <string.h>
#include <strings.h>

void stringZip(const char *pInputStr, long IInputLen, char *pOutputStr)
{
int count = 1;
char temp;
char c[100];
int i,j = 0;
temp = pInputStr[0];
for(i = 1; i <= IInputLen; i++)
{
if(temp == pInputStr[i])
{
count++;
}
if((temp != pInputStr[i]))
{
if(count == 1)
{
pOutputStr[j] = temp;
j++;
}else if(count > 1)
{
memset(c, 0, sizeof(c));
sprintf(c, "%d", count);
mempcpy(pOutputStr+j, c, strlen(c));
j += strlen(c);
pOutputStr[j] = temp;
j++;
}
count = 1;
temp = pInputStr[i];
}
}
return NULL;
}

int main(int argc, char* argv[])
{
char a[100] = "aaaaaaaaaa";
char b[100];
memset(b, 0, sizeof(b));
stringZip(a, strlen(a), b);
printf("%s\n",b);
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: