华为面试题:请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
2017-12-29 20:44
453 查看
已经很久没有写博客了,2017年的最后一天写一篇,用这样的方式和2017年告别挺好的。这段时间经历找工作,是我这一年截止到目前最迷茫的时期。看看程序,思考能让我冷静下来,不被杂事打扰,前天看到了华为的一道面试题,今天晚上解出来了,没有测试内存和时间。通过键盘输入一串小写字母(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<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
//void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
//{
// int temp=1,k=0;
// char j;
// for(int i=0;i<lInputLen-1;i++)
// {
// if(pInputStr[i]==pInputStr[i+1])
// {
// temp++;
//
// }
// else
// {
// if(temp!=1)
// {
// j=temp+'0';
// temp=1;
// }
// pOutputStr[k++]=j;
// pOutputStr[k++]=pInputStr[i];
// }
// }
// pOutputStr[k++]=pInputStr[lInputLen-1];
// pOutputStr[k]='\0';
//};
////此段程序检测10个以内的字符。
//
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
int temp=1,k=0;
char j,m;
for(int i=0;i<lInputLen-1;i++)
{
if(pInputStr[i]==pInputStr[i+1])
{
temp++;
}
else
{
if(temp>1&&temp<10)
{
pOutputStr[k++]=temp+'0';
//pOutputStr[k++]=pInputStr[i];
//temp=1;
}
if(temp>=10)
{
pOutputStr[k++]=(temp/10)+'0';
pOutputStr[k++]=(temp%10)+'0';
//pOutputStr[k++]=pInputStr[i];
//temp=1;
}
pOutputStr[k++]=pInputStr[i];
temp=1;
}
}
pOutputStr[k++]=pInputStr[lInputLen-1];
pOutputStr[k]='\0';
};
int main()
{
char p[7];
cin>>p;
long n=strlen(p);
char q[7];
stringZip(p,n,q);
cout<<q;;
system("pause");
return 0;
}
总结
静下心来看程序,给我很多安宁。面对面试重要的是思路,其次是编程技巧。所以看是近几年还是前几年的题库,我个人觉得都是可以的,毕竟,我学的是打鱼的技巧,在哪个地方打鱼的区别不是太大。###转载请备注链接有问题请提出指正,共同学习进步。
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<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
//void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
//{
// int temp=1,k=0;
// char j;
// for(int i=0;i<lInputLen-1;i++)
// {
// if(pInputStr[i]==pInputStr[i+1])
// {
// temp++;
//
// }
// else
// {
// if(temp!=1)
// {
// j=temp+'0';
// temp=1;
// }
// pOutputStr[k++]=j;
// pOutputStr[k++]=pInputStr[i];
// }
// }
// pOutputStr[k++]=pInputStr[lInputLen-1];
// pOutputStr[k]='\0';
//};
////此段程序检测10个以内的字符。
//
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
int temp=1,k=0;
char j,m;
for(int i=0;i<lInputLen-1;i++)
{
if(pInputStr[i]==pInputStr[i+1])
{
temp++;
}
else
{
if(temp>1&&temp<10)
{
pOutputStr[k++]=temp+'0';
//pOutputStr[k++]=pInputStr[i];
//temp=1;
}
if(temp>=10)
{
pOutputStr[k++]=(temp/10)+'0';
pOutputStr[k++]=(temp%10)+'0';
//pOutputStr[k++]=pInputStr[i];
//temp=1;
}
pOutputStr[k++]=pInputStr[i];
temp=1;
}
}
pOutputStr[k++]=pInputStr[lInputLen-1];
pOutputStr[k]='\0';
};
int main()
{
char p[7];
cin>>p;
long n=strlen(p);
char q[7];
stringZip(p,n,q);
cout<<q;;
system("pause");
return 0;
}
总结
静下心来看程序,给我很多安宁。面对面试重要的是思路,其次是编程技巧。所以看是近几年还是前几年的题库,我个人觉得都是可以的,毕竟,我学的是打鱼的技巧,在哪个地方打鱼的区别不是太大。###转载请备注链接有问题请提出指正,共同学习进步。
相关文章推荐
- 华为上机笔试之通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc
- 字符串处理算法(八)将字符串中连续出席的重复字母进行压缩(华为校园招聘题)
- 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足一下条件的单词:该单词的后面紧接着再次出现自己本身。跟踪重复次数最多的单词及其重复次数,输出.
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)。
- 华为:通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串
- 编写一个程序,从标准输入读入字符,并把它们写出在标准输出中。 所有非字母字符都完全按照它的输入形式输出,字母字符在输出前进行加密
- 将字符串中连续出现的重复字母进行压缩
- 将字符串中连续出现的重复字母进行压缩
- (1)写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”); (2)编写单元测试进行测试; (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%。
- 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足一下条件的单词:该单词的后面紧接着再次出现自己本身。跟踪重复次数最多的单词及其重复次数,输出.
- (华为机考题)通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
- java程序,编写一个程序,输出一个字符串中的大写英文字母数,小写英文字母数及非英文字母数
- 华为计算字符个数写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- 华为机试通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串
- 7、编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)。
- 华为:通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串