华为机试及个人答案.docx
《华为机试及个人答案.docx》由会员分享,可在线阅读,更多相关《华为机试及个人答案.docx(9页珍藏版)》请在冰点文库上搜索。
华为机试及个人答案
华为2014校园招聘的机试题目和2013年的完全一样。
一、题目描述(60分):
通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr);
【输入】pInputStr:
输入字符串
lInputLen:
输入字符串长度
【输出】pOutputStr:
输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:
“deefd” 输出:
“def”
输入:
“afafafaf” 输出:
“af”
输入:
“pppppppp” 输出:
“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。
一定要保证编译运行不受影响。
我的答案:
#include
#include
#include
#defineMAXSIZE256
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr);
intmain(void)
{
char*In_str=(char*)malloc(MAXSIZE);
char*Out_str=(char*)malloc(MAXSIZE);
printf("pleaseinputstring:
\n");
scanf("%s",In_str);
stringFilter(In_str,strlen(In_str),Out_str);
printf("%s\n",Out_str);
return0;
}
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr)
{
intj=0;
boolch[26]={0};
for(inti=0;i{
if(false==ch[pInputStr[i]-'a'])
{
ch[pInputStr[i]-'a']=true;
pOutputStr[j++]=pInputStr[i];
}
pOutputStr[j]='\0';
}
}
二、题目描述(40分):
通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。
比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。
例如:
字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr);
【输入】pInputStr:
输入字符串
lInputLen:
输入字符串长度
【输出】pOutputStr:
输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:
“cccddecc” 输出:
“3c2de2c”
输入:
“adef” 输出:
“adef”
输入:
“pppppppp”输出:
“8p”
我的答案:
#include
#include
#include
#defineMAXSIZE256
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr);
intmain(void)
{
charIn_str[MAXSIZE];
charOut_str[MAXSIZE];
printf("pleaseinputastring\n");
scanf("%s",In_str);
stringZip(In_str,strlen(In_str),Out_str);
printf("%s",Out_str);
return0;
}
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr)
{
inti,j,k=0;
intnum;
charbuffer[20];
for(i=0;i{
num=0;
for(j=i+1;j{
//if(pInputStr[i]==pInputStr[j])
if(pInputStr[i]==pInputStr[j])
num++;
else
break;
}
if(num)
{
memset(buffer,0,sizeof(buffer));
itoa(num+1,buffer,10);//10进制转换字符串
strcpy(pOutputStr+k,buffer);//可能为3位也可能4位等
k+=strlen(buffer);
}
pOutputStr[k++]=pInputStr[i];
i=i+num+1;
}
pOutputStr[k]='\0';
}
三、题目描述(50分):
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:
“操作数1运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。
要求实现函数:
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr);
【输入】pInputStr:
输入字符串
lInputLen:
输入字符串长度
【输出】pOutputStr:
输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:
“4+7” 输出:
“11”
输入:
“4-7” 输出:
“-3”
输入:
“9++7” 输出:
“0”注:
格式错误
我的答案:
#include
#include
#include
#defineMAXSIZE256
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr);
intmain(void)
{
charIn_str[MAXSIZE]="1++3";
charOut_str[MAXSIZE];
//printf("pleaseinputstring:
\n");
//scanf("%s",In_str);
arithmetic(In_str,strlen(In_str),Out_str);
printf("%s\n",Out_str);
return0;
}
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr)
{
inti,j,num1=0,num2=0,num_space,resule;
booladd=false,sub=false;
charbuffer[MAXSIZE];
for(i=0,num_space=0;i{
if(pInputStr[i]=='')
num_space++;
}
if(2!
=num_space)//空格数错
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
//return;
}
for(i=0;pInputStr[i]!
='';i++)
{
if(pInputStr[i]>'0'&&pInputStr[i]<'9')
num1=num1*10+pInputStr[i]-'0';
else//有非法字符
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
return;
}
}
for(j=i+1;pInputStr[j]!
='';j++);
if(1!
=j-i-1)//运算符号数量非法
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
return;
}
else
{
if('+'!
=pInputStr[i+1]&&'-'!
=pInputStr[i+1])//运算符号非法
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
//return;
}
else
{
if('+'==pInputStr[i+1])
add=true;
if('-'==pInputStr[i+1])
sub=true;
for(i=j+1;i{
if(pInputStr[i]>='0'&&pInputStr[i]<='9')
num2=num2*10+pInputStr[i]-'0';
else//有非法字符
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
//return;
}
}
if(add)
resule=num1+num2;
elseif(sub)
resule=num1-num2;
memset(buffer,0,sizeof(buffer));
itoa(resule,buffer,10);
strcpy(pOutputStr,buffer);
}
}
}